import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, OneToOne, OneToMany } from 'typeorm'; import { AssistanteMaternelle } from './assistantes_maternelles.entity'; import { Parents } from './parents.entity'; import { Message } from './messages.entity'; // Enums alignés avec la BDD PostgreSQL export enum RoleType { PARENT = 'parent', GESTIONNAIRE = 'gestionnaire', SUPER_ADMIN = 'super_admin', ASSISTANTE_MATERNELLE = 'assistante_maternelle', } export enum GenreType { H = 'H', F = 'F', AUTRE = 'Autre', } export enum StatutUtilisateurType { EN_ATTENTE = 'en_attente', ACTIF = 'actif', SUSPENDU = 'suspendu', } @Entity('utilisateurs') export class Users { @PrimaryGeneratedColumn('uuid') id: string; @Column({ unique: true, name: 'courriel' }) email: string; @Column({ name: 'mot_de_passe_hash' }) password_hash: string; @Column({ name: 'prenom', nullable: true }) first_name: string; @Column({ name: 'nom', nullable: true }) last_name: string; @Column({ type: 'enum', enum: GenreType, enumName: 'genre_type', // correspond à l'enum SQL nullable: true, name: 'genre' }) gender?: GenreType; @Column({ type: 'enum', enum: RoleType, enumName: 'role_type', name: 'role' }) role: RoleType; @Column({ type: 'enum', enum: StatutUtilisateurType, enumName: 'statut_utilisateur_type', default: StatutUtilisateurType.EN_ATTENTE, name: 'statut' }) status: StatutUtilisateurType; @Column({ nullable: true, name: 'telephone' }) phone?: string; @Column({ nullable: true, name: 'adresse' }) address?: string; @Column({ nullable: true, name: 'photo_url' }) photo_url?: string; @Column({ default: false, name: 'consentement_photo' }) consent_photo: boolean; @Column({ type: 'timestamptz', nullable: true, name: 'date_consentement_photo' }) consent_photo_at?: Date; @Column({ default: false, name: 'changement_mdp_obligatoire' }) must_change_password: boolean; @CreateDateColumn({ name: 'cree_le', type: 'timestamptz' }) created_at: Date; @UpdateDateColumn({ name: 'modifie_le', type: 'timestamptz' }) updated_at: Date; // Relations @OneToOne(() => AssistanteMaternelle, a => a.user) assistanteMaternelle?: AssistanteMaternelle; @OneToOne(() => Parents, p => p.user) parent?: Parents; @OneToMany(() => Message, m => m.sender) messages?: Message[]; }