linagora/openpaas-esn

View on GitHub
backend/core/db/mongo/models/domain.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

var mongoose = require('mongoose');
var trim = require('trim');
var Schema = mongoose.Schema;
var injection = require('../schemas/injection');
var Injection = injection.Injection;

var AdminOfDomainSchema = new mongoose.Schema({
  user_id: {type: Schema.ObjectId, ref: 'User', required: true},
  timestamps: {
    creation: {type: Date, default: Date.now}
  }
}, { _id: false });

var DomainSchema = new Schema({
  name: {type: String, required: true, unique: true, lowercase: true, trim: true},
  label: {type: String, lowercase: true, trim: true}, // multiple domains can have same label and keep the domain name is unique
  company_name: {type: String, required: true, lowercase: true, trim: true},
  hostnames: [{ type: String, lowercase: true, trim: true }],
  administrator: {type: Schema.ObjectId, ref: 'User'}, // deprecated
  administrators: [AdminOfDomainSchema],
  timestamps: {
    creation: {type: Date, default: Date.now}
  },
  injections: {type: [Injection], validate: [injection.validateInjections, 'Bad injections']},
  schemaVersion: {type: Number, default: 1}
});

DomainSchema.statics = {

  /**
   * check the existence of a Domain where company_name: name
   *
   * @param {String} name
   * @param {Function} cb
   */
  testCompany: function(name, cb) {
    var qname = trim(name).toLowerCase();
    var query = {company_name: qname};
    this.findOne(query, cb);
  },

  /**
   * check the existence of a Domain where company_name: company_name
   * and Domain name : domain_name
   *
   * @param {String} name
   * @param {Function} cb
   */
  testDomainCompany: function(company_name, domain_name, cb) {
    var qcompany_name = trim(company_name).toLowerCase();
    var qdomain_name = trim(domain_name).toLowerCase();
    var query = {company_name: qcompany_name, name: qdomain_name};
    this.findOne(query, cb);
  },

  /**
   * Load a domain from its ID
   *
   * @param {String} id
   * @param {Function} cb
   */
  loadFromID: function(id, cb) {
    if (!id) {
      return cb(new Error('ID can not be null'));
    }
    this.findOne({_id: id}, cb);
  }

};

module.exports = mongoose.model('Domain', DomainSchema);