import { Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm'; import { Role } from './role.entity'; import { RefreshToken } from './refresh-token.entity'; import { Tenant } from '../../tenant/tenant.entity'; @Entity({ name: 'tbl_users', schema: 'auth' }) export class User { @PrimaryGeneratedColumn('uuid') id!: string; @Column({ name: 'tenant_id', type: 'uuid', nullable: true }) tenantId!: string | null; @ManyToOne(() => Tenant, { eager: false, nullable: true, onDelete: 'SET NULL' }) @JoinColumn({ name: 'tenant_id' }) tenant!: Tenant | null; @Column({ type: 'varchar', length: 255, unique: true }) email!: string; @Column({ name: 'password_hash', type: 'varchar', length: 255, select: false }) passwordHash!: string; @Column({ name: 'first_name', type: 'varchar', length: 100 }) firstName!: string; @Column({ name: 'last_name', type: 'varchar', length: 100, nullable: true }) lastName!: string; @Column({ name: 'role_id', type: 'uuid' }) roleId!: string; @ManyToOne(() => Role, (role) => role.users, { eager: true, onDelete: 'RESTRICT' }) @JoinColumn({ name: 'role_id' }) role!: Role; @Column({ name: 'is_active', type: 'boolean', default: true }) isActive!: boolean; @Column({ name: 'is_system', type: 'boolean', default: false }) isSystem!: boolean; // System default admin user cannot be deleted @Column({ name: 'last_login_at', type: 'timestamp with time zone', nullable: true }) lastLoginAt!: Date | null; @OneToMany(() => RefreshToken, (token) => token.user, { cascade: true }) refreshTokens!: RefreshToken[]; @CreateDateColumn({ name: 'created_at' }) createdAt!: Date; @UpdateDateColumn({ name: 'updated_at' }) updatedAt!: Date; }