app2-api/modules/auth/user.model.js

92 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,
},
fbid: {
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) {
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;
};