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', ADMINISTRATEUR = 'administrateur', } //Enum pour definir le genre export enum GenreType { H = 'H', F = 'F', AUTRE = 'Autre', } //Enum pour definir le statut utilisateur export enum StatutUtilisateurType { EN_ATTENTE = 'en_attente', ACTIF = 'actif', SUSPENDU = 'suspendu', } export enum SituationFamilialeType { CELIBATAIRE = 'celibataire', MARIE = 'marie', DIVORCE = 'divorce', VEUF = 'veuf', PACSE = 'pacse', SEPARE = 'separe', PARENT_ISOLE = 'parent_isole', CONCUBINAGE = 'concubinage', } //Declaration de l'entite utilisateur @Entity('utilisateurs', { schema: 'public' }) export class Users { @PrimaryGeneratedColumn('uuid') id: string; @Column({ unique: true, name: 'email' }) email: string; @Column({ name: 'password' }) password: string; @Column({ name: 'prenom', nullable: true }) prenom?: string; @Column({ name: 'nom', nullable: true }) nom?: string; @Column({ type: 'enum', enum: GenreType, enumName: 'genre_type', // correspond à l'enum de la db psql nullable: true, name: 'genre' }) genre?: GenreType; @Column({ type: 'enum', enum: RoleType, enumName: 'role_type', // correspond à l'enum de la db psql name: 'role' }) role: RoleType; @Column({ type: 'enum', enum: StatutUtilisateurType, enumName: 'statut_utilisateur_type', // correspond à l'enum de la db psql default: StatutUtilisateurType.EN_ATTENTE, name: 'statut' }) statut: StatutUtilisateurType; @Column({ type: 'enum', enum: SituationFamilialeType, enumName: 'situation_familiale_type', nullable: true, name: 'situation_familiale' }) situation_familiale?: SituationFamilialeType; @Column({ nullable: true, name: 'telephone' }) telephone?: string; @Column({ name: 'mobile', nullable: true }) mobile?: string; @Column({ name: 'telephone_fixe', nullable: true }) telephone_fixe?: string; @Column({ nullable: true, name: 'adresse' }) adresse?: string; @Column({ nullable: true, name: 'photo_url' }) photo_url?: string; @Column({ default: false, name: 'consentement_photo' }) consentement_photo: boolean; @Column({ type: 'timestamptz', nullable: true, name: 'date_consentement_photo' }) date_consentement_photo?: Date; @Column({ default: false, name: 'changement_mdp_obligatoire' }) changement_mdp_obligatoire: boolean; @Column({ nullable: true, name: 'ville' }) ville?: string; @Column({ nullable: true, name: 'code_postal' }) code_postal?: string; @Column({ nullable: true, name: 'profession' }) profession?: string; @Column({ name: 'date_naissance', type: 'date', nullable: true }) date_naissance?: Date; @CreateDateColumn({ name: 'cree_le', type: 'timestamptz' }) cree_le: Date; @UpdateDateColumn({ name: 'modifie_le', type: 'timestamptz' }) modifie_le: Date; // Relations @OneToOne(() => AssistanteMaternelle, a => a.user) assistanteMaternelle?: AssistanteMaternelle; @OneToOne(() => Parents, p => p.user) parent?: Parents; @OneToMany(() => Message, m => m.sender) messages?: Message[]; @OneToMany(() => Parents, parent => parent.co_parent) co_parent_in?: Parents[]; }