62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
const { DataTypes, Model } = require("sequelize");
|
|
const sequelize = require("../util/database");
|
|
const bcrypt = require("bcryptjs");
|
|
|
|
/**
|
|
* "email": "jake@jake.jake",
|
|
"token": "jwt.token.here",
|
|
"username": "jake",
|
|
"bio": "I work at statefarm",
|
|
"image": null
|
|
*/
|
|
|
|
const User = sequelize.define("User", {
|
|
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, allowNull: false },
|
|
email: { type: DataTypes.STRING, allowNull: false, unique: true },
|
|
username: { type: DataTypes.STRING, allowNull: false, unique: true },
|
|
firstname: { type: DataTypes.STRING },
|
|
lastname: { type: DataTypes.STRING },
|
|
bio: { type: DataTypes.TEXT, allowNull: true },
|
|
image: { type: DataTypes.TEXT, allowNull: true },
|
|
role: { type: DataTypes.STRING },
|
|
password: { type: DataTypes.STRING, allowNull: false },
|
|
createdAt: { type: DataTypes.DATE, allowNull: true },
|
|
updatedAt: { type: DataTypes.DATE, allowNull: true }
|
|
}, {
|
|
sequelize,
|
|
timestamps: false,
|
|
modelName: 'User',
|
|
tableName: 'user',
|
|
createdAt: true,
|
|
updatedAt: true
|
|
});
|
|
|
|
Model.prototype.matchPassword = async function (enteredPassword) {
|
|
return await bcrypt.compare(enteredPassword, this.password);
|
|
};
|
|
|
|
const DEFAULT_SALT_ROUNDS = 10;
|
|
|
|
User.addHook("beforeCreate", async (user) => {
|
|
const encryptedPassword = await bcrypt.hash(
|
|
user.password,
|
|
DEFAULT_SALT_ROUNDS
|
|
);
|
|
user.password = encryptedPassword;
|
|
});
|
|
|
|
User.prototype.toJSONFor = function () {
|
|
return {
|
|
id: this.id,
|
|
email: this.email,
|
|
username: this.username,
|
|
firstname: this.firstname,
|
|
lastname: this.lastname,
|
|
bio: this.bio,
|
|
image: this.image,
|
|
role: this.role
|
|
};
|
|
};
|
|
|
|
module.exports = User;
|