import { Exclude, Transform } from 'class-transformer'; import { IsEmail } from 'class-validator'; import { IUser } from 'src/model/interface'; import { BeforeInsert, BeforeUpdate, Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToMany, ManyToOne, OneToOne, PrimaryGeneratedColumn, } from 'typeorm'; import { Role } from '../role.entity'; import { KeySystem } from '../system.entity'; import { SSOUser } from './sso.user.entity'; import { UserSettings } from './user.settings.entity'; @Entity() export class User implements IUser { @PrimaryGeneratedColumn('uuid') id: string; @IsEmail() @Column({ unique: false }) username: string; @Column({ name: 'first_name', default: '' }) firstName: string; @Column({ name: 'last_name', default: '' }) lastName: string; @CreateDateColumn({ name: 'created_at' }) createdAt: Date; @Column({ default: null }) lastLogin: Date; @Exclude() @OneToOne(() => SSOUser, (sso) => sso.user, { eager: true, cascade: true, onDelete: 'CASCADE' }) external: SSOUser; @Column({ default: true }) isActive: boolean; @ManyToOne(() => Role, (role) => role.user, { eager: true, onDelete: 'NO ACTION' }) @JoinColumn() @Transform(({ value }) => value.name) role: Role; @ManyToMany(() => KeySystem, (system) => system.managers) systems: KeySystem[]; @DeleteDateColumn() deletedAt: Date; @OneToOne(() => UserSettings, (settings) => settings.user, { cascade: true }) settings: UserSettings; accessToken?: string; refreshToken?: string; @BeforeInsert() @BeforeUpdate() createSettings() { if (this.settings == null) { this.settings = {} as any; } } }