import { Table, Column, CreatedAt, UpdatedAt, Model, DataType, BeforeCreate, BeforeUpdate, PrimaryKey, AutoIncrement, Default, HasMany, BelongsToMany } from "sequelize-typescript"; import { hash, compare } from "bcryptjs"; import Ticket from "./Ticket"; import Queue from "./Queue"; import UserQueue from "./UserQueue"; @Table class User extends Model { @PrimaryKey @AutoIncrement @Column id: number; @Column name: string; @Column email: string; @Column(DataType.VIRTUAL) password: string; @Column passwordHash: string; @Default(0) @Column tokenVersion: number; @Default("admin") @Column profile: string; @CreatedAt createdAt: Date; @UpdatedAt updatedAt: Date; @HasMany(() => Ticket) tickets: Ticket[]; @BelongsToMany(() => Queue, () => UserQueue) queues: Queue[]; @BeforeUpdate @BeforeCreate static hashPassword = async (instance: User): Promise => { if (instance.password) { instance.passwordHash = await hash(instance.password, 8); } }; public checkPassword = async (password: string): Promise => { return compare(password, this.getDataValue("passwordHash")); }; } export default User;