generated from bastian/boilerplate
74 lines
1.8 KiB
TypeScript
74 lines
1.8 KiB
TypeScript
import {
|
|
Column,
|
|
CreateDateColumn,
|
|
Entity,
|
|
Index,
|
|
JoinTable,
|
|
ManyToMany,
|
|
OneToMany,
|
|
OneToOne,
|
|
PrimaryGeneratedColumn,
|
|
Unique,
|
|
UpdateDateColumn,
|
|
} from 'typeorm';
|
|
import { RoleEntity } from '../../roles/entities/role.entity';
|
|
import { SessionEntity } from '../../sessions/entities/session.entity';
|
|
import { UserSettingsEntity } from './user-settings.entity';
|
|
|
|
@Entity('users')
|
|
@Unique('uq_users_issuer_subject', ['issuer', 'subject'])
|
|
export class UserEntity {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id!: string;
|
|
|
|
@Index('idx_users_issuer')
|
|
@Column({ type: 'varchar', length: 255 })
|
|
issuer!: string;
|
|
|
|
@Column({ type: 'varchar', length: 255 })
|
|
subject!: string;
|
|
|
|
@Column({ type: 'varchar', length: 255 })
|
|
name!: string;
|
|
|
|
@Column({ type: 'varchar', length: 320, nullable: true })
|
|
email!: string | null;
|
|
|
|
@Column({ name: 'email_verified', type: 'boolean', nullable: true })
|
|
emailVerified!: boolean | null;
|
|
|
|
@Column({ type: 'boolean', default: true })
|
|
active!: boolean;
|
|
|
|
@Column({
|
|
name: 'last_login_at',
|
|
type: 'datetime',
|
|
precision: 3,
|
|
nullable: true,
|
|
})
|
|
lastLoginAt!: Date | null;
|
|
|
|
@ManyToMany(() => RoleEntity, (role) => role.users, { eager: true })
|
|
@JoinTable({
|
|
name: 'user_roles',
|
|
joinColumn: { name: 'user_id', referencedColumnName: 'id' },
|
|
inverseJoinColumn: { name: 'role_id', referencedColumnName: 'id' },
|
|
})
|
|
roles!: RoleEntity[];
|
|
|
|
@OneToMany(() => SessionEntity, (session) => session.user)
|
|
sessions!: SessionEntity[];
|
|
|
|
@OneToOne(() => UserSettingsEntity, (settings) => settings.user, {
|
|
cascade: true,
|
|
eager: true,
|
|
})
|
|
settings!: UserSettingsEntity;
|
|
|
|
@CreateDateColumn({ name: 'created_at', type: 'datetime', precision: 3 })
|
|
createdAt!: Date;
|
|
|
|
@UpdateDateColumn({ name: 'updated_at', type: 'datetime', precision: 3 })
|
|
updatedAt!: Date;
|
|
}
|