78 lines
1.3 KiB
TypeScript
78 lines
1.3 KiB
TypeScript
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";
|
|
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[];
|
|
|
|
@HasMany(() => UserOnlineTime)
|
|
UserOnlineTime: UserOnlineTime[];
|
|
|
|
@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;
|