94 lines
2.5 KiB
JavaScript
94 lines
2.5 KiB
JavaScript
'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,
|
|
},
|
|
phone: {
|
|
type: DataTypes.STRING,
|
|
allowNull: false,
|
|
unique: true
|
|
},
|
|
email: {
|
|
type: DataTypes.STRING,
|
|
// allowNull: false,
|
|
// unique: true,
|
|
// validate: { isEmail: true }
|
|
},
|
|
password: {
|
|
type: DataTypes.STRING,
|
|
// allowNull: false,
|
|
},
|
|
fbuid: {
|
|
type: DataTypes.STRING,
|
|
},
|
|
name: {
|
|
type: DataTypes.STRING,
|
|
},
|
|
surname: {
|
|
type: DataTypes.STRING,
|
|
},
|
|
entityId: {
|
|
type: DataTypes.UUID,
|
|
foreignKey : true,
|
|
},
|
|
profile_picture: {
|
|
type: DataTypes.STRING,
|
|
defaultValue: 'media/defaultProfile.png',
|
|
},
|
|
accessibility: {
|
|
type: DataTypes.BOOLEAN,
|
|
defaultValue: true,
|
|
},
|
|
lastlogin: {
|
|
type: DataTypes.DATE,
|
|
defaultValue: null,
|
|
},
|
|
}, {
|
|
tableName: 'user',
|
|
freezeTableName: true,
|
|
timestamps: true,
|
|
});
|
|
|
|
User.associate = function (models) {
|
|
User.Roles = User.belongsToMany(models.Rol, {
|
|
through: models.UserRoles,
|
|
foreignKey: 'userId'
|
|
});
|
|
User.Entity = User.belongsTo(models.Entity, { foreignKey: 'entityId' });
|
|
User.Devices = User.hasMany(models.UserDevice, { foreignKey: 'userId' });
|
|
|
|
//User.Comments = User.hasMany(models.UserComment, { foreignKey: 'UserId' });
|
|
//User.Reactions = User.hasMany(models.UserReaction, { foreignKey: 'UserId' });
|
|
};
|
|
|
|
|
|
User.beforeCreate(async function (model, options) {
|
|
if (model.password) {
|
|
const encrypted = await generateHashPassword(model.password)
|
|
model.password = encrypted;
|
|
}
|
|
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;
|
|
}; |