'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; };