import { Entity, Column, PrimaryColumn, CreateDateColumn, UpdateDateColumn, OneToMany, BeforeInsert, } from 'typeorm'; import { DeviceRegistry } from './device-registry.entity'; import { FamilyMember } from './family-member.entity'; @Entity('users') export class User { @PrimaryColumn({ length: 20 }) id: string; @Column({ length: 255, unique: true }) email: string; @Column({ length: 20, nullable: true }) phone?: string; @Column({ name: 'password_hash', length: 255 }) passwordHash: string; @Column({ length: 100 }) name: string; @Column({ length: 10, default: 'en-US' }) locale: string; @Column({ length: 50, default: 'UTC' }) timezone: string; @Column({ name: 'email_verified', default: false }) emailVerified: boolean; @CreateDateColumn({ name: 'created_at' }) createdAt: Date; @UpdateDateColumn({ name: 'updated_at' }) updatedAt: Date; @OneToMany(() => DeviceRegistry, (device) => device.user) devices: DeviceRegistry[]; @OneToMany(() => FamilyMember, (familyMember) => familyMember.user) familyMemberships: FamilyMember[]; @BeforeInsert() generateId() { if (!this.id) { this.id = `usr_${this.generateNanoId()}`; } } private generateNanoId(): string { const chars = 'abcdefghijklmnopqrstuvwxyz0123456789'; let result = ''; for (let i = 0; i < 12; i++) { result += chars.charAt(Math.floor(Math.random() * chars.length)); } return result; } }