Source: lib/project.js

'use strict';

/**
 * Проект
 *
 * Базовая схема для всех элементов системы
 * Изменение данной схемы влияет на все элементы системы
 *
 */

var mongoose = require('mongoose');
var extend = require('mongoose-schema-extend');
var Schema = mongoose.Schema;
var parentModel = require('./thing');

var Model = function () {
  var Parent = mongoose.model('Thing').schema;
  /**
   *
   * @class Project
   * @extends Thing
   * @version 0.0.1
   */
  var _Schema = Parent.extend(
    /** @lends Project.prototype */
    {

      /**
       * Группы
       * @type {Array.<mongoose.Schema.Types.ObjectId>}
       * @see {Group}
       *
       */
      groups: [],

      /**
       * Отношения с проектами
       * каким проектам принадлежит
       * @type {Array.<mongoose.Schema.Types.ObjectId>}
       * @see {Project}
       *
       */
      projects: [],

      /**
       * Владелец проекта
       */
      owner: { type: Schema.Types.ObjectId, required: true },

      /**
       * Администраторы
       */
      admins: [],

      /**
       * Менеджеры
       */
      managers: [],

      /**
       * Ползователи
       */
      users: [],

      /**
       * Разработчики
       */
      developers: [],

      /**
       * Домены проекта
       */
      domains: [],

      /**
       * Настройки проекта
       */
      settings: [],

      /**
       * blacklist
       */
      blacklist: [],

      /**
       * ups - settings
       * настройки синхронизации для `ups`
       * { rdomain: '', ldomain:'', ... }
       */
      uconfigs: [],

      /**
       * Хранилище рег. информации по проекту
       * { type: 'ssh', [{ key: value } ] }
       * { type: 'cp', [{ key: value } ] }
       *
       * @example
       *
       * { type: 'ssh', [ { host: 'ssh.myhost.com', username: 'user', password: 'secret', active: true } ] }
       * { type: 'cp', [ { host: 'cp.myhost.com', username: 'user', password: 'secret', active: true } ] }
       * { type: 'ftp, [ { host: 'cp.myhost.com', username: 'user', password: 'secret', active: true } ] }
       * { type: 'mysql, [ { host: 'cp.myhost.com', username: 'user', password: 'secret', dbname: 'db', active: true } ] }
       *
       */
      regdata: [],

      /**
       * Документы связанные с проектом
       */
      docs: []

    },
    {
      /**
       * Коллекция MongoDB
       */
      collection: 'projects'
    });

  return mongoose.model('Project', _Schema);

};

module.exports = new Model();