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; }