76 lines
1.7 KiB
TypeScript
76 lines
1.7 KiB
TypeScript
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;
|
|
}
|
|
}
|
|
|
|
}
|