feat: create User model

This commit is contained in:
karishmas6
2024-09-24 17:23:53 +05:30
parent 31be279168
commit df998b4304

58
server/src/models/User.ts Normal file
View File

@@ -0,0 +1,58 @@
import { DataTypes, Model, Optional } from 'sequelize';
import bcrypt from 'bcrypt';
import sequelize from '../db/config';
interface UserAttributes {
id: number;
email: string;
password: string;
}
// Optional fields for creating a new user
interface UserCreationAttributes extends Optional<UserAttributes, 'id'> {}
class User extends Model<UserAttributes, UserCreationAttributes> implements UserAttributes {
public id!: number;
public email!: string;
public password!: string;
public async isValidPassword(password: string): Promise<boolean> {
return bcrypt.compare(password, this.password);
}
}
User.init(
{
id: {
type: DataTypes.INTEGER.UNSIGNED,
autoIncrement: true,
primaryKey: true,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: true,
},
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
},
{
sequelize,
tableName: 'user',
hooks: {
beforeCreate: async (user: User) => {
if (user.password) {
const salt = await bcrypt.genSalt(10);
user.password = await bcrypt.hash(user.password, salt);
}
},
},
}
);
export default User;