eyght-models
Version:
Models for eyght
62 lines (54 loc) • 3.04 kB
JavaScript
let mongoose = require('mongoose'),
Bcrypt = require('bcrypt-nodejs');
let eygUserSchema = new mongoose.Schema({
name: {
first: {type: 'String', required: true, meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
middle: {type: 'String', meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
last: {type: 'String', required: true, meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}}
},
password: {type: 'String', required: true, meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
token: {type: 'String'},
addr1: {type: 'String', meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
addr2: {type: 'String', meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
addr3: {type: 'String', meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
city: {type: 'String', meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
stProv: {type: 'String', meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
zip: {type: 'String', meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
ctryID: {type: mongoose.Schema.Types.ObjectId, ref: 'genCtry', meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
langID: {type: mongoose.Schema.Types.ObjectId, ref: 'genLang', meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
phone: {type: 'String', meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
email: {type: 'String', required: true, unique: true, match: [/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, 'server.errors.match.email'], meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
emailTypeID: {type: mongoose.Schema.Types.ObjectId, ref: 'genEmailType', required: true, meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
clientInfo: [{
clientID: {type: mongoose.Schema.Types.ObjectId, ref: 'eygClient'},
clientUserID: {type: 'String'}
}],
roles: [{type: mongoose.Schema.Types.ObjectId, ref: 'eygRole', required: true}],
lastClientViewedID: {type: mongoose.Schema.Types.ObjectId, ref: 'eygClient', meta: {writableBy: ['5a6f719e4c4be84b52c1ecc3']}},
lastPgViewed: {type: 'String'},
lastLoginDt: {type: 'Date'},
active: {type: 'Boolean', required: true},
inactDt: {type: 'Date'}, //store all dates in utc
inactRsnID: {type: mongoose.Schema.Types.ObjectId, ref: 'genInactRsn'}
}, {timestamps: true});
eygUserSchema.methods.generateHash = (password) => {
return new Promise((resolve, reject) => {
Bcrypt.genSalt(10, function (err, salt) {
if (err) return reject(err);
Bcrypt.hash(password, salt, null, (err, hash) => {
if (err) return reject(err);
password = hash;
return resolve(password);
});
});
});
};
eygUserSchema.methods.validatePassword = (password, passwordToCompare) => {
return new Promise((resolve, reject) => {
Bcrypt.compare(password, passwordToCompare, (err, isMatch) => {
if (err) return reject(err);
else return resolve(isMatch);
});
});
};
module.exports = mongoose.model('eygUser', eygUserSchema, 'eygUser');