2019-04-24 21:01:54 +00:00
'use strict' ;
const { isValidPassword , generateHashPassword } = require ( '../../helpers/security.helper' ) ;
module . exports = function ( sequelize , DataTypes ) {
const User = sequelize . define ( 'User' , {
id : {
type : DataTypes . UUID ,
defaultValue : DataTypes . UUIDV4 ,
primaryKey : true ,
} ,
2019-06-13 07:53:57 +00:00
phone : {
type : DataTypes . STRING ,
2019-07-20 16:11:43 +00:00
unique : true
// allowNull: false, //Tiene que poderse dar de alta usuarios solo con el correo electronico para que siga funcionando las invitaciones por web como hasta ahora
2019-06-13 07:53:57 +00:00
} ,
2019-04-24 21:01:54 +00:00
email : {
type : DataTypes . STRING ,
2019-07-20 16:11:43 +00:00
unique : true ,
2019-06-21 08:40:28 +00:00
// allowNull: false,
// validate: { isEmail: true }
2019-04-24 21:01:54 +00:00
} ,
password : {
type : DataTypes . STRING ,
2019-06-21 08:40:28 +00:00
// allowNull: false,
2019-06-13 07:53:57 +00:00
} ,
2019-06-21 08:40:28 +00:00
fbuid : {
2019-06-13 07:53:57 +00:00
type : DataTypes . STRING ,
2019-04-24 21:01:54 +00:00
} ,
2019-06-13 07:53:57 +00:00
name : {
type : DataTypes . STRING ,
} ,
surname : {
type : DataTypes . STRING ,
} ,
profile _picture : {
type : DataTypes . STRING ,
defaultValue : 'media/defaultProfile.png' ,
} ,
accessibility : {
type : DataTypes . BOOLEAN ,
defaultValue : true ,
} ,
2019-07-09 13:18:25 +00:00
refresh _token : {
2019-07-09 10:14:18 +00:00
type : DataTypes . STRING ( 512 ) ,
2019-07-08 11:11:40 +00:00
} ,
state : {
type : DataTypes . STRING ,
2019-07-09 10:14:18 +00:00
defaultValue : 'active' ,
2019-07-08 11:11:40 +00:00
} ,
2019-09-09 10:06:29 +00:00
app _version : {
type : DataTypes . STRING ,
} ,
2019-08-05 15:34:59 +00:00
level : {
type : DataTypes . INTEGER ,
defaultValue : 1 ,
} ,
2019-06-13 07:53:57 +00:00
lastlogin : {
type : DataTypes . DATE ,
defaultValue : null ,
2019-05-09 16:23:54 +00:00
} ,
2019-04-24 21:01:54 +00:00
} , {
2019-07-05 07:06:29 +00:00
tableName : 'users' ,
2019-04-24 21:01:54 +00:00
freezeTableName : true ,
timestamps : true ,
} ) ;
User . associate = function ( models ) {
2019-06-13 07:53:57 +00:00
User . Roles = User . belongsToMany ( models . Rol , {
2019-07-11 18:05:06 +00:00
through : models . UserRoles ,
2019-08-05 15:34:59 +00:00
foreignKey : 'userId' ,
as : 'roles'
2019-06-13 07:53:57 +00:00
} ) ;
User . Entity = User . belongsTo ( models . Entity , { foreignKey : 'entityId' } ) ;
2019-07-11 18:05:06 +00:00
User . EventsCreates = User . hasMany ( models . Event , { foreignKey : 'userId' } ) ;
2019-06-13 07:53:57 +00:00
User . Devices = User . hasMany ( models . UserDevice , { foreignKey : 'userId' } ) ;
2019-07-05 07:06:29 +00:00
User . Comments = User . hasMany ( models . Comment , { foreignKey : 'userId' } ) ;
User . EventsReservations = User . hasMany ( models . EventReservation , { foreignKey : 'userId' } ) ;
2019-09-19 11:30:32 +00:00
User . EventsInscriptions = User . hasMany ( models . EventInscription , { foreignKey : 'userId' } ) ;
User . Questions = User . hasMany ( models . EventQuestion , { foreignKey : 'userId' , as : "questions" , required : false , } ) ;
2019-07-05 07:06:29 +00:00
// User.InscriptionsValidate = User.hasMany(models.EventIncription, { foreignkey: 'validateUserId'})
2019-06-13 07:53:57 +00:00
//User.Reactions = User.hasMany(models.UserReaction, { foreignKey: 'UserId' });
2019-04-24 21:01:54 +00:00
} ;
User . beforeCreate ( async function ( model , options ) {
2019-06-21 08:40:28 +00:00
if ( model . password ) {
const encrypted = await generateHashPassword ( model . password )
model . password = encrypted ;
}
2019-04-24 21:01:54 +00:00
return model ;
} ) ;
// Instance Methods
// InventoryLevel.prototype.someMethod = function () {...}
User . prototype . comparePassword = async function ( candidatePassword ) {
const user = this ;
if ( user . password ) {
return await isValidPassword ( user . password , candidatePassword )
} else {
return false ;
}
}
return User ;
} ;