ptitspas-ynov-back/src/entities/users.entity.ts

107 lines
2.4 KiB
TypeScript

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