all files / backend/models/ master.js

65.22% Statements 15/23
0% Branches 0/6
25% Functions 1/4
68.18% Lines 15/22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77                                                                                                                           
'use strict'
 
let _ = require('lodash')
let mongoose = require('mongoose')
let Jwt = require('app/services/jwt')
let Schema = mongoose.Schema
let ObjectId = Schema.ObjectId
const RESTRICTED = new Set(['email', 'password', 'salt'])
 
/**
 * Jedi Master Schema
 */
var MasterSchema = new Schema({
  firstName: {
    type: String,
    required: true
  },
  lastName: String,
  origin: String,
  masters: [{
    type: ObjectId,
    ref: 'Master'
  }],
  apprentices: [{
    type: ObjectId,
    ref: 'Master'
  }],
  skills: [String],
  level: Number,
  email: {
    type: String,
    select: false,
    set: val => val.toLowerCase()
  },
  phoneNumber: String,
  createdOn: {
    type: Date,
    default: Date.now
  },
  updatedOn: {
    type: Date,
    default: Date.now
  }
})
 
MasterSchema.virtual('fullname').get(function () {
  return _.trim(`${this.firstName || ''} ${this.lastName || ''}`)
})
 
MasterSchema.virtual('token').get(function () {
  let payload = {
    _id: this._id,
    role: this.role
  }
 
  return Jwt.signToken(payload)
})
 
MasterSchema.pre('save', function (next) {
  // Update the timestamp
  this.updatedOn = Date.now()
 
  return next()
})
 
// Convert from 'firstName,lastName' to
// { firstName: 1, lastName: 1}
MasterSchema.statics.reduceFields = function (fields) {
  return fields.split(',').reduce((memo, field) => {
    if (RESTRICTED.has(field)) return memo
    memo[field] = 1
    return memo
  }, {})
}
 
module.exports = mongoose.model('Master', MasterSchema, 'masters')