184 lines
5.0 KiB
TypeScript
184 lines
5.0 KiB
TypeScript
import {
|
|
Entity, PrimaryGeneratedColumn, Column,
|
|
CreateDateColumn, UpdateDateColumn,
|
|
OneToOne, OneToMany, ManyToOne, JoinColumn
|
|
} from 'typeorm';
|
|
import { AssistanteMaternelle } from './assistantes_maternelles.entity';
|
|
import { Parents } from './parents.entity';
|
|
import { Message } from './messages.entity';
|
|
import { Relais } from './relais.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',
|
|
REFUSE = 'refuse',
|
|
}
|
|
|
|
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', nullable: true })
|
|
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.ACTIF,
|
|
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({ 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: 'token_creation_mdp', length: 255 })
|
|
token_creation_mdp?: string;
|
|
|
|
@Column({ type: 'timestamptz', nullable: true, name: 'token_creation_mdp_expire_le' })
|
|
token_creation_mdp_expire_le?: Date;
|
|
|
|
/** Ticket #127 — réinitialisation mot de passe oublié (distinct de token_creation_mdp / inscription) */
|
|
@Column({ nullable: true, name: 'password_reset_token', length: 255 })
|
|
password_reset_token?: string;
|
|
|
|
@Column({ type: 'timestamptz', nullable: true, name: 'password_reset_expires' })
|
|
password_reset_expires?: Date;
|
|
|
|
/** Token pour reprise après refus (lien email), ticket #110 */
|
|
@Column({ nullable: true, name: 'token_reprise', length: 255 })
|
|
token_reprise?: string;
|
|
|
|
@Column({ type: 'timestamptz', nullable: true, name: 'token_reprise_expire_le' })
|
|
token_reprise_expire_le?: Date;
|
|
|
|
@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;
|
|
|
|
@Column({ name: 'lieu_naissance_ville', length: 100, nullable: true })
|
|
lieu_naissance_ville?: string;
|
|
|
|
@Column({ name: 'lieu_naissance_pays', length: 100, nullable: true })
|
|
lieu_naissance_pays?: string;
|
|
|
|
@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[];
|
|
|
|
@Column({ nullable: true, name: 'relais_id' })
|
|
relaisId?: string;
|
|
|
|
/** Numéro de dossier (format AAAA-NNNNNN), attribué à la soumission (ticket #103) */
|
|
@Column({ nullable: true, name: 'numero_dossier', length: 20 })
|
|
numero_dossier?: string;
|
|
|
|
@ManyToOne(() => Relais, relais => relais.gestionnaires, { nullable: true })
|
|
@JoinColumn({ name: 'relais_id' })
|
|
relais?: Relais;
|
|
}
|