98 lines
2.0 KiB
TypeScript
98 lines
2.0 KiB
TypeScript
import {
|
|
Column,
|
|
AfterLoad,
|
|
CreateDateColumn,
|
|
DeleteDateColumn,
|
|
Entity,
|
|
Index,
|
|
ManyToOne,
|
|
PrimaryGeneratedColumn,
|
|
UpdateDateColumn,
|
|
BeforeInsert,
|
|
BeforeUpdate,
|
|
OneToMany,
|
|
} from 'typeorm';
|
|
import { Role } from '../../roles/entities/role.entity';
|
|
import { Status } from '../../statuses/entities/status.entity';
|
|
import * as bcrypt from 'bcryptjs';
|
|
import { EntityHelper } from 'src/utils/entity-helper';
|
|
import { AuthProvidersEnum } from 'src/auth/auth-providers.enum';
|
|
import { Exclude, Expose } from 'class-transformer';
|
|
import { Player } from 'src/players/entities/player.entity';
|
|
|
|
@Entity()
|
|
export class User extends EntityHelper {
|
|
@PrimaryGeneratedColumn()
|
|
id: number;
|
|
|
|
@Column({ unique: true, nullable: true })
|
|
email: string | null;
|
|
|
|
@Column({ nullable: true })
|
|
@Exclude({ toPlainOnly: true })
|
|
password: string;
|
|
|
|
@Exclude({ toPlainOnly: true })
|
|
public previousPassword: string;
|
|
|
|
@AfterLoad()
|
|
public loadPreviousPassword(): void {
|
|
this.previousPassword = this.password;
|
|
}
|
|
|
|
@BeforeInsert()
|
|
@BeforeUpdate()
|
|
async setPassword() {
|
|
if (this.previousPassword !== this.password && this.password) {
|
|
const salt = await bcrypt.genSalt();
|
|
this.password = await bcrypt.hash(this.password, salt);
|
|
}
|
|
}
|
|
|
|
@Column({ default: AuthProvidersEnum.email })
|
|
@Expose({ groups: ['exposeProvider'] })
|
|
provider: string;
|
|
|
|
@Index()
|
|
@Column({ nullable: true })
|
|
socialId: string | null;
|
|
|
|
@Index()
|
|
@Column({ nullable: true })
|
|
firstName: string | null;
|
|
|
|
@Index()
|
|
@Column({ nullable: true })
|
|
lastName: string | null;
|
|
|
|
@Column({ default: true })
|
|
helpTextsEnabled: boolean;
|
|
|
|
@ManyToOne(() => Role, {
|
|
eager: true,
|
|
})
|
|
role?: Role | null;
|
|
|
|
@ManyToOne(() => Status, {
|
|
eager: true,
|
|
})
|
|
status?: Status;
|
|
|
|
@OneToMany(() => Player, (player) => player.user)
|
|
players: Player[];
|
|
|
|
@Column({ nullable: true })
|
|
@Index()
|
|
@Exclude({ toPlainOnly: true })
|
|
hash: string | null;
|
|
|
|
@CreateDateColumn()
|
|
createdAt: Date;
|
|
|
|
@UpdateDateColumn()
|
|
updatedAt: Date;
|
|
|
|
@DeleteDateColumn()
|
|
deletedAt: Date;
|
|
}
|