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

98 lines
3.2 KiB
JavaScript
Raw Normal View History

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,
},
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-04-24 21:01:54 +00:00
email: {
type: DataTypes.STRING,
2019-07-20 16:11:43 +00:00
unique: true,
// allowNull: false,
// validate: { isEmail: true }
2019-04-24 21:01:54 +00:00
},
password: {
type: DataTypes.STRING,
// allowNull: false,
},
fbuid: {
type: DataTypes.STRING,
2019-04-24 21:01:54 +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
},
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) {
User.Roles = User.belongsToMany(models.Rol, {
2019-07-11 18:05:06 +00:00
through: models.UserRoles,
foreignKey: 'userId'
});
User.Entity = User.belongsTo(models.Entity, { foreignKey: 'entityId' });
2019-07-11 18:05:06 +00:00
User.EventsCreates = User.hasMany(models.Event, { foreignKey: 'userId' });
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' });
User.EventsInscriptions = User.hasMany(models.EventInscription, { foreignKey: 'userId' });
// User.InscriptionsValidate = User.hasMany(models.EventIncription, { foreignkey: 'validateUserId'})
//User.Reactions = User.hasMany(models.UserReaction, { foreignKey: 'UserId' });
2019-04-24 21:01:54 +00:00
};
User.beforeCreate(async function (model, options) {
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;
};