projeto-hit/backend/src/models/User.ts

78 lines
1.3 KiB
TypeScript
Raw Normal View History

import {
Table,
Column,
CreatedAt,
UpdatedAt,
Model,
DataType,
BeforeCreate,
BeforeUpdate,
PrimaryKey,
AutoIncrement,
Default,
HasMany,
2022-05-03 21:20:58 +00:00
BelongsToMany,
} from "sequelize-typescript";
import { hash, compare } from "bcryptjs";
import Ticket from "./Ticket";
import Queue from "./Queue";
import UserQueue from "./UserQueue";
import UserOnlineTime from "./UserOnlineTime";
@Table
class User extends Model<User> {
@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[];
2022-05-03 21:20:58 +00:00
@HasMany(() => UserOnlineTime)
UserOnlineTime: UserOnlineTime[];
2022-05-03 21:20:58 +00:00
@BelongsToMany(() => Queue, () => UserQueue)
queues: Queue[];
@BeforeUpdate
@BeforeCreate
static hashPassword = async (instance: User): Promise<void> => {
if (instance.password) {
instance.passwordHash = await hash(instance.password, 8);
}
};
public checkPassword = async (password: string): Promise<boolean> => {
return compare(password, this.getDataValue("passwordHash"));
};
}
export default User;