"use strict";
var debug = require('debug')('models:person');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var extend = require('mongoose-schema-extend');
var bcrypt = require('bcrypt');
var parentModel = require('./profile');
var Model = function () {
/**
* Получение базовой коллекции
* @type {Mongoose.Schema}
*/
var Parent = mongoose.model('Profile').schema;
/**
* Схема профиля персоны, человека.
*
* __Thing > Profile > Person__
*
* @class Person
* @augments Profile
*
* @see https://schema.org/Person
* @see {@link Profile}
* @see {@link Account}
* @see {@link Thing}
*
* @example
*
* var Person = require('noda-models').Person;
* var person = new Person({...});
*
* Person.find().exec(function(){});
* person.save();
*
*
*
*/
var _Schema = Parent.extend(
{
/**
* Связь с Account
*/
accounts: [{
type: Schema.Types.ObjectId,
ref: 'Account'
}],
/**
* Дополнительное имя человека, может быть использовано для отчества
*/
additionalName: { type: String },
/**
* Физический адрес
*/
address: {
type: Schema.Types.ObjectId,
ref: 'PostalAddress'
},
/**
* Организация с которой связан этот человек.
* Например, школа/университет, клуб, команда
*/
affiliation: [{
type: Schema.Types.ObjectId,
ref: 'Organization'
}],
/**
* Образовательные учереждения, выпусником которых является этот человек.
*/
alumniOf:[{
type: Schema.Types.ObjectId,
ref: 'EducationOrganization'
}],
/**
* Награды выигранные этим человеком
* или этим результатом творчества (в единственном числе award).
*/
awards: [{ type: String }],
/**
* Дата рождения.
*/
birthDate: { type: Date },
/**
* Марка (бренд) продукта.
*/
brand: [{
type: Schema.Types.ObjectId,
ref: 'Brand'
}],
/**
* Контактная информация человека.
*/
contactPoint: {
type: Schema.Types.ObjectId,
ref: 'ContactPoint'
},
/**
* Контактная информация человека.
*/
contactPoints: [{
type: Schema.Types.ObjectId,
ref: 'ContactPoint'
}],
/**
* Основной e-mail адрес.
*/
email: { type: String },
/**
* Фамильное имя. В США - последнее имя человека.
* Может быть использовано вместе с givenName вместо свойство Name.
*/
familyName: { type: String },
/**
* Номер факса.
*/
faxNumber: { type: String },
/**
* Самые общие однонаправленные социальные отношения.
*/
follows: [{ type: Schema.Types.ObjectId, ref: 'Person' }],
/**
* Пол
*/
gender: { type: String },
/**
* Данное при рождении имя. В США первое имя человека.
* Может быть использовано вместе с FamilyName вместо свойства Name.
*/
givenName: { type: String },
/**
* Домашние контактные данные.
*/
homeLocation: [{
type: Schema.Types.ObjectId,
ref: 'ContactPoint'
}],
/**
* Почетный префикс предшествующий имени человека, например Dr/Mrs/Mr.
*/
honorificPrefix: String,
/**
* Почетный суффикс предшествующий имени человека,
* таких как MD/PhD/MSCSW (Доктор медицины / Доктор философии / ).
*/
honorificSuffix: { type: String },
/**
* Должность этого человека (например, Financial Manager).
*/
jobTitle: { type: String, trim: true },
/**
* Самые общие двунаправленные социальные/рабочие отношения.
*/
knows: [{
type: Schema.Types.ObjectId,
ref: 'Person'
}],
/**
* Организация к которой этот человек принадлежит.
*/
memberOf: [{
type: Schema.Types.ObjectId,
ref: 'Organization'
}],
/**
* национальность.
*/
nationality: [{
type: Schema.Types.ObjectId,
ref: 'Country'
}],
/**
* Продукты, принадлежашие организации или человеку.
* OwnershipInfo or Product
*/
owns: [{
type: Schema.Types.ObjectId,
ref: 'Product'
}],
/**
* Событие, на котором этот человек является исполнителем или участинком.
*/
performerIn: [{
type: Schema.Types.ObjectId,
ref: 'Event'
}],
/**
* ИНН(идентификационный номер налогоплательщика)
* организации или физического лица.
*/
vatID: { type: String },
/**
* Рабочие контактные данные.
*/
workLocation: [{
type: Schema.Types.ObjectId,
ref: 'ContactPoint'
}],
/**
* Связи с организацией,
* Организации, в которых этот человек работает.
*/
worksFor: [{
type: Schema.Types.ObjectId,
ref: 'Organization'
}]
}
);
return mongoose.model('Person', _Schema);
};
module.exports = new Model();