import { Table, Column, CreatedAt, UpdatedAt, Model, DataType, BeforeCreate, BeforeUpdate, PrimaryKey, AutoIncrement, Default, HasMany, BelongsToMany, ForeignKey, BelongsTo } from "sequelize-typescript"; import { hash, compare } from "bcryptjs"; import Ticket from "./Ticket"; import Queue from "./Queue"; import UserQueue from "./UserQueue"; import Company from "./Company"; import QuickMessage from "./QuickMessage"; import Whatsapp from "./Whatsapp"; @Table class User extends Model { @PrimaryKey @AutoIncrement @Column id: number; @Column name: string; @Column email: string; @Column allTicket: string; @Column(DataType.VIRTUAL) password: string; @Column passwordHash: string; @Default(0) @Column tokenVersion: number; @Default("admin") @Column profile: string; @Column super: boolean; @Column online: boolean; @CreatedAt createdAt: Date; @UpdatedAt updatedAt: Date; @ForeignKey(() => Company) @Column companyId: number; @BelongsTo(() => Company) company: Company; @HasMany(() => Ticket) tickets: Ticket[]; @BelongsToMany(() => Queue, () => UserQueue) queues: Queue[]; @HasMany(() => QuickMessage, { onUpdate: "CASCADE", onDelete: "CASCADE", hooks: true }) quickMessages: QuickMessage[]; @ForeignKey(() => Whatsapp) @Column whatsappId: number; @BelongsTo(() => Whatsapp) whatsapp: Whatsapp; @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;