feat: Intégration du backend NestJS depuis YNOV
- Framework: NestJS avec TypeORM - Authentification: JWT (access + refresh tokens) - Gestion utilisateurs: CRUD complet avec validation - Routes: auth, users, parents, assistantes maternelles - Dockerfile pour conteneurisation
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import { Entity, PrimaryColumn, Column, OneToOne, JoinColumn } from 'typeorm';
|
||||
import { Users } from './users.entity';
|
||||
|
||||
@Entity('assistantes_maternelles')
|
||||
export class AssistanteMaternelle {
|
||||
// PK = FK vers utilisateurs.id
|
||||
@PrimaryColumn('uuid', { name: 'id_utilisateur' })
|
||||
user_id: string;
|
||||
|
||||
@OneToOne(() => Users, (user) => user.assistanteMaternelle, {
|
||||
onDelete: 'CASCADE',
|
||||
})
|
||||
@JoinColumn({ name: 'id_utilisateur', referencedColumnName: 'id' })
|
||||
user: Users;
|
||||
|
||||
@Column({ name: 'numero_agrement', length: 50, nullable: true })
|
||||
approval_number?: string;
|
||||
|
||||
@Column({ name: 'nir_chiffre', length: 15, nullable: true })
|
||||
nir?: string;
|
||||
|
||||
@Column({ name: 'nb_max_enfants', type: 'int', nullable: true })
|
||||
max_children?: number;
|
||||
|
||||
@Column({ name: 'biographie', type: 'text', nullable: true })
|
||||
biography?: string;
|
||||
|
||||
@Column({
|
||||
name: 'disponible',
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
nullable: true,
|
||||
})
|
||||
available?: boolean;
|
||||
|
||||
@Column({ name: 'ville_residence', length: 100, nullable: true })
|
||||
residence_city?: string;
|
||||
|
||||
@Column( { name: 'date_agrement', type: 'date', nullable: true })
|
||||
agreement_date?: Date;
|
||||
|
||||
@Column( { name: 'annee_experience', type: 'smallint', nullable: true })
|
||||
years_experience?: number;
|
||||
|
||||
@Column( { name: 'specialite', length: 100, nullable: true })
|
||||
specialty?: string;
|
||||
|
||||
@Column( { name: 'place_disponible', type: 'integer', nullable: true })
|
||||
places_available?: number;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
import { Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
|
||||
import { Contrat } from "./contrats.entity";
|
||||
import { Users } from "./users.entity";
|
||||
|
||||
export enum StatutAvenantType {
|
||||
PROPOSE = 'propose',
|
||||
ACCEPTE = 'accepte',
|
||||
REFUSE = 'refuse',
|
||||
}
|
||||
|
||||
@Entity('avenants_contrats')
|
||||
export class AvenantContrat {
|
||||
// Define your columns and relationships here
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@ManyToOne(() => Contrat, { onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'id_contrat' })
|
||||
contrat: Contrat;
|
||||
|
||||
@Column({ type: 'jsonb', nullable: true, name: 'modifications' })
|
||||
modifications?: any;
|
||||
|
||||
@ManyToOne(() => Users, { nullable: true })
|
||||
@JoinColumn({ name: 'initie_par', referencedColumnName: 'id' })
|
||||
initiator?: Users;
|
||||
|
||||
@Column({
|
||||
type: 'enum',
|
||||
enum: StatutAvenantType,
|
||||
enumName: 'statut_avenant_type',
|
||||
default: StatutAvenantType.PROPOSE,
|
||||
name: 'statut'
|
||||
})
|
||||
statut: StatutAvenantType;
|
||||
|
||||
@CreateDateColumn({ name: 'cree_le', type: 'timestamptz' })
|
||||
createdAt: Date;
|
||||
|
||||
@UpdateDateColumn({ name: 'modifie_le', type: 'timestamptz' })
|
||||
updatedAt: Date;
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
import {
|
||||
Entity, PrimaryGeneratedColumn, Column,
|
||||
OneToMany, ManyToMany, CreateDateColumn, JoinTable
|
||||
} from 'typeorm';
|
||||
import { Parents } from './parents.entity';
|
||||
import { ParentsChildren } from './parents_children.entity';
|
||||
import { Dossier } from './dossiers.entity';
|
||||
|
||||
export enum StatutEnfantType {
|
||||
A_NAITRE = 'a_naitre',
|
||||
ACTIF = 'actif',
|
||||
SCOLARISE = 'scolarise',
|
||||
}
|
||||
|
||||
export enum GenreType {
|
||||
H = 'H',
|
||||
F = 'F',
|
||||
AUTRE = 'Autre',
|
||||
}
|
||||
|
||||
@Entity('enfants')
|
||||
export class Children {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@Column({
|
||||
type: 'enum',
|
||||
enum: StatutEnfantType,
|
||||
enumName: 'statut_enfant_type',
|
||||
name: 'statut'
|
||||
})
|
||||
status: StatutEnfantType;
|
||||
|
||||
@Column({ name: 'prenom', length: 100, nullable: true })
|
||||
first_name?: string;
|
||||
|
||||
@Column({ name: 'nom', length: 100, nullable: true })
|
||||
last_name?: string;
|
||||
|
||||
@Column({
|
||||
type: 'enum',
|
||||
enum: GenreType,
|
||||
enumName: 'genre_type',
|
||||
nullable: true,
|
||||
name: 'genre'
|
||||
})
|
||||
gender?: GenreType;
|
||||
|
||||
@Column({ type: 'date', nullable: true, name: 'date_naissance' })
|
||||
birth_date?: Date;
|
||||
|
||||
@Column({ type: 'date', nullable: true, name: 'date_prevue_naissance' })
|
||||
due_date?: Date;
|
||||
|
||||
@Column({ nullable: true, name: 'photo_url', type: 'text' })
|
||||
photo_url?: string;
|
||||
|
||||
@Column({ default: false, name: 'consentement_photo', type: 'boolean' })
|
||||
consent_photo: boolean;
|
||||
|
||||
@Column({ type: 'timestamptz', nullable: true, name: 'date_consentement_photo' })
|
||||
consent_photo_at?: Date;
|
||||
|
||||
@Column({ default: false, name: 'est_multiple', type: 'boolean' })
|
||||
is_multiple: boolean;
|
||||
|
||||
// Lien via table de jointure enfants_parents
|
||||
@OneToMany(() => ParentsChildren, pc => pc.child)
|
||||
parentLinks: ParentsChildren[];
|
||||
|
||||
// Relation avec Dossier
|
||||
@OneToMany(() => Dossier, d => d.child)
|
||||
dossiers: Dossier[];
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
import { Column, CreateDateColumn, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
|
||||
import { Dossier } from "./dossiers.entity";
|
||||
|
||||
export enum StatutContratType {
|
||||
BROUILLON = 'brouillon',
|
||||
EN_ATTENTE_SIGNATURE = 'en_attente_signature',
|
||||
VALIDE = 'valide',
|
||||
RESILIE = 'resilie',
|
||||
}
|
||||
|
||||
@Entity('contrats')
|
||||
export class Contrat {
|
||||
// Define your columns and relationships here
|
||||
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@OneToOne(() => Dossier, {onDelete: 'CASCADE'} )
|
||||
@JoinColumn({ name: 'id_dossier'})
|
||||
dossier: Dossier;
|
||||
|
||||
@Column({type: 'jsonb', nullable: true, name: 'planning'})
|
||||
planning?: any;
|
||||
|
||||
@Column({type: 'numeric', precision: 6, scale: 2, nullable: true, name: 'tarif_horaire'})
|
||||
hourly_rate?: string;
|
||||
|
||||
@Column({type: 'numeric', precision: 6, scale: 2, nullable: true, name: 'indemnites_repas'})
|
||||
meal_indemnity?: string;
|
||||
|
||||
@Column( { name: 'date_debut', type: 'date', nullable: true })
|
||||
start_date?: Date;
|
||||
|
||||
@Column({
|
||||
type: 'enum',
|
||||
enum: StatutContratType,
|
||||
enumName: 'statut_contrat_type',
|
||||
default: StatutContratType.BROUILLON,
|
||||
name: 'statut'
|
||||
})
|
||||
statut: StatutContratType;
|
||||
|
||||
@Column({type: 'boolean', default: false, name: 'signe_parent'})
|
||||
signed_by_parent: boolean;
|
||||
|
||||
@Column({type: 'boolean', default: false, name: 'signe_am'})
|
||||
signed_by_am: boolean;
|
||||
|
||||
@Column({type: 'timestamptz', nullable: true, name: 'finalise_le'})
|
||||
finalized_at?: Date;
|
||||
|
||||
@CreateDateColumn({ name: 'cree_le', type: 'timestamptz' })
|
||||
created_at: Date;
|
||||
|
||||
@UpdateDateColumn({ name: 'modifie_le', type: 'timestamptz' })
|
||||
updated_at: Date;
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
import {
|
||||
Entity, PrimaryGeneratedColumn, Column,
|
||||
ManyToOne, OneToMany, CreateDateColumn, UpdateDateColumn, JoinColumn
|
||||
} from 'typeorm';
|
||||
import { Parents } from './parents.entity';
|
||||
import { Children } from './children.entity';
|
||||
import { Message } from './messages.entity';
|
||||
|
||||
export enum StatutDossierType {
|
||||
ENVOYE = 'envoye',
|
||||
ACCEPTE = 'accepte',
|
||||
REFUSE = 'refuse',
|
||||
CLOTURE = 'cloture',
|
||||
}
|
||||
|
||||
@Entity('dossiers')
|
||||
export class Dossier {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@ManyToOne(() => Parents, p => p.dossiers, { onDelete: 'CASCADE', nullable: false })
|
||||
@JoinColumn({ name: 'id_parent', referencedColumnName: 'user_id' })
|
||||
parent: Parents;
|
||||
|
||||
@ManyToOne(() => Children, c => c.dossiers, { onDelete: 'CASCADE', nullable: false })
|
||||
@JoinColumn({ name: 'id_enfant', referencedColumnName: 'id' })
|
||||
child: Children;
|
||||
|
||||
@Column({ type: 'text', nullable: true, name: 'presentation' })
|
||||
presentation?: string;
|
||||
|
||||
@Column({ type: 'varchar', length: 50, nullable: true, name: 'type_contrat' })
|
||||
type_contrat?: string;
|
||||
|
||||
@Column({ type: 'boolean', default: false, name: 'repas' })
|
||||
meals: boolean;
|
||||
|
||||
@Column({ type: 'numeric', precision: 10, scale: 2, nullable: true, name: 'budget' })
|
||||
budget?: number;
|
||||
|
||||
@Column({ type: 'jsonb', nullable: true, name: 'planning_souhaite' })
|
||||
desired_schedule?: any;
|
||||
|
||||
@Column({
|
||||
type: 'enum',
|
||||
enum: StatutDossierType,
|
||||
enumName: 'statut_dossier_type',
|
||||
default: StatutDossierType.ENVOYE,
|
||||
name: 'statut'
|
||||
})
|
||||
status: StatutDossierType;
|
||||
|
||||
@CreateDateColumn({ name: 'cree_le', type: 'timestamptz' })
|
||||
created_at: Date;
|
||||
|
||||
@UpdateDateColumn({ name: 'modifie_le', type: 'timestamptz' })
|
||||
updated_at: Date;
|
||||
|
||||
@OneToMany(() => Message, m => m.dossier)
|
||||
messages: Message[];
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
import { Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
|
||||
import { Children } from "./children.entity";
|
||||
import { Users } from "./users.entity";
|
||||
import { Parents } from "./parents.entity";
|
||||
|
||||
export enum TypeEvenementType {
|
||||
ABSENCE_ENFANT = 'absence_enfant',
|
||||
CONGE_AM = 'conge_am',
|
||||
CONGE_PARENT = 'conge_parent',
|
||||
ARRET_MALADIE_AM = 'arret_maladie_am',
|
||||
EVENEMENT_RPE = 'evenement_rpe',
|
||||
}
|
||||
|
||||
export enum StatutEvenementType {
|
||||
PROPOSE = 'propose',
|
||||
VALIDE = 'valide',
|
||||
REFUSE = 'refuse',
|
||||
}
|
||||
|
||||
@Entity('evenements')
|
||||
export class Evenement {
|
||||
// Define your columns and relationships here
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@Column({
|
||||
type: 'enum',
|
||||
enum: TypeEvenementType,
|
||||
enumName: 'type_evenement_type',
|
||||
name: 'type'
|
||||
})
|
||||
type: TypeEvenementType;
|
||||
|
||||
@ManyToOne(() => Children, { onDelete: 'CASCADE', nullable: true })
|
||||
@JoinColumn({ name: 'id_enfant', referencedColumnName: 'id' })
|
||||
child?: Children;
|
||||
|
||||
@ManyToOne(() => Users, { nullable: true })
|
||||
@JoinColumn({ name: 'id_am', referencedColumnName: 'id' })
|
||||
assistanteMaternelle?: Users;
|
||||
|
||||
@ManyToOne(() => Parents, { nullable: true })
|
||||
@JoinColumn({ name: 'id_parent', referencedColumnName: 'user_id' })
|
||||
parent?: Parents;
|
||||
|
||||
@ManyToOne(() => Users, { nullable: true })
|
||||
@JoinColumn({ name: 'cree_par', referencedColumnName: 'id' })
|
||||
created_by?: Users;
|
||||
|
||||
@Column({ type: 'timestamptz', nullable: true, name: 'date_debut' })
|
||||
start_date?: Date;
|
||||
|
||||
@Column({ type: 'timestamptz', nullable: true, name: 'date_fin' })
|
||||
end_date?: Date;
|
||||
|
||||
@Column({ type: 'text', nullable: true, name: 'commentaires' })
|
||||
comments?: string;
|
||||
|
||||
@Column({
|
||||
type: 'enum',
|
||||
enum: StatutEvenementType,
|
||||
enumName: 'statut_evenement_type',
|
||||
name: 'statut',
|
||||
default: StatutEvenementType.PROPOSE
|
||||
})
|
||||
status: StatutEvenementType;
|
||||
|
||||
@Column({type: 'timestamptz', nullable: true, name: 'delai_grace'})
|
||||
grace_deadline?: Date;
|
||||
|
||||
@Column({type: 'boolean', default: false, name: 'urgent'})
|
||||
urgent: boolean;
|
||||
|
||||
@CreateDateColumn({ name: 'cree_le', type: 'timestamptz' })
|
||||
created_at: Date;
|
||||
|
||||
@UpdateDateColumn({ name: 'modifie_le', type: 'timestamptz' })
|
||||
updated_at: Date;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import {
|
||||
Entity, PrimaryGeneratedColumn, Column,
|
||||
ManyToOne, JoinColumn, CreateDateColumn
|
||||
} from 'typeorm';
|
||||
import { Dossier } from './dossiers.entity';
|
||||
import { Users } from './users.entity';
|
||||
|
||||
@Entity('messages')
|
||||
export class Message {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@ManyToOne(() => Dossier, d => d.messages, { onDelete: 'CASCADE', nullable: false })
|
||||
@JoinColumn({ name: 'id_dossier' })
|
||||
dossier: Dossier;
|
||||
|
||||
@ManyToOne(() => Users, u => u.messages, { onDelete: 'CASCADE', nullable: false })
|
||||
@JoinColumn({ name: 'id_expediteur' })
|
||||
sender: Users;
|
||||
|
||||
@Column({ type: 'text', name: 'contenu' })
|
||||
content: string;
|
||||
|
||||
@Column({ type: 'boolean', name: 're_redige_par_ia', default: false })
|
||||
reRedigeParIA: boolean;
|
||||
|
||||
@CreateDateColumn({ name: 'cree_le', type: 'timestamptz' })
|
||||
created_at: Date;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
import { Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
|
||||
import { Users } from "./users.entity";
|
||||
|
||||
@Entity('notifications')
|
||||
export class Notification {
|
||||
// Define your columns and relationships here
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@ManyToOne(() => Users, { onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'id_utilisateur', referencedColumnName: 'id' })
|
||||
user: Users;
|
||||
|
||||
@Column({ type: 'text', name: 'contenu' })
|
||||
content: string;
|
||||
|
||||
@Column({type: 'boolean', name: 'lu', default: false})
|
||||
read: boolean;
|
||||
|
||||
@CreateDateColumn({ name: 'cree_le', type: 'timestamptz' })
|
||||
created_at: Date;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
import {
|
||||
Entity, PrimaryColumn, OneToOne, JoinColumn,
|
||||
ManyToOne, OneToMany
|
||||
} from 'typeorm';
|
||||
import { Users } from './users.entity';
|
||||
import { ParentsChildren } from './parents_children.entity';
|
||||
import { Dossier } from './dossiers.entity';
|
||||
|
||||
@Entity('parents', { schema: 'public' })
|
||||
export class Parents {
|
||||
// PK = FK vers utilisateurs.id
|
||||
@PrimaryColumn('uuid', { name: 'id_utilisateur' })
|
||||
user_id: string;
|
||||
|
||||
@OneToOne(() => Users, user => user.parent, { onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'id_utilisateur', referencedColumnName: 'id' })
|
||||
user: Users;
|
||||
|
||||
// Co-parent (nullable) → FK vers utilisateurs.id
|
||||
@ManyToOne(() => Users, { nullable: true })
|
||||
@JoinColumn({ name: 'id_co_parent', referencedColumnName: 'id' })
|
||||
co_parent?: Users;
|
||||
|
||||
// Lien vers enfants via la table enfants_parents
|
||||
@OneToMany(() => ParentsChildren, pc => pc.parent)
|
||||
parentChildren: ParentsChildren[];
|
||||
|
||||
// Lien vers les dossiers de ce parent
|
||||
@OneToMany(() => Dossier, d => d.parent)
|
||||
dossiers: Dossier[];
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import {
|
||||
Entity, ManyToOne, JoinColumn, PrimaryColumn
|
||||
} from 'typeorm';
|
||||
import { Parents } from './parents.entity';
|
||||
import { Children } from './children.entity';
|
||||
|
||||
@Entity('enfants_parents', { schema: 'public' })
|
||||
export class ParentsChildren {
|
||||
@PrimaryColumn('uuid', { name: 'id_parent' })
|
||||
parentId: string;
|
||||
|
||||
@PrimaryColumn('uuid', { name: 'id_enfant' })
|
||||
enfantId: string;
|
||||
|
||||
@ManyToOne(() => Parents, p => p.parentChildren, { onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'id_parent', referencedColumnName: 'user_id' })
|
||||
parent: Parents;
|
||||
|
||||
@ManyToOne(() => Children, c => c.parentLinks, { onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'id_enfant', referencedColumnName: 'id' })
|
||||
child: Children;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
import { Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
|
||||
import { Users } from "./users.entity";
|
||||
|
||||
@Entity('signalements_bugs')
|
||||
export class SignalementBug {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@ManyToOne(() => Users, {nullable: true})
|
||||
@JoinColumn({ name: 'id_utilisateur', referencedColumnName: 'id' })
|
||||
user?: Users;
|
||||
|
||||
@Column({ type: 'text', name: 'description'})
|
||||
description: string;
|
||||
|
||||
@CreateDateColumn({ name: 'cree_le', type: 'timestamptz' })
|
||||
created_at: Date;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import { Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
|
||||
import { Users } from "./users.entity";
|
||||
|
||||
@Entity('uploads')
|
||||
export class Upload {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@ManyToOne(() => Users, { onDelete: 'SET NULL', nullable: true })
|
||||
@JoinColumn({ name: 'id_utilisateur', referencedColumnName: 'id' })
|
||||
user?: Users;
|
||||
|
||||
@Column({ type: 'text', name: 'fichier_url' })
|
||||
file_url: string;
|
||||
|
||||
@Column({type: 'varchar', length: 50, nullable: true, name: 'type'})
|
||||
type?: string;
|
||||
|
||||
@CreateDateColumn({ name: 'cree_le', type: 'timestamptz' })
|
||||
created_at: Date;
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
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[];
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
import { Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
|
||||
import { Users } from "./users.entity";
|
||||
|
||||
export enum StatutValidationType {
|
||||
EN_ATTENTE = 'en_attente',
|
||||
VALIDE = 'valide',
|
||||
REFUSE = 'refuse',
|
||||
}
|
||||
|
||||
@Entity('validations')
|
||||
export class Validation {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@ManyToOne(() => Users, { nullable: true })
|
||||
@JoinColumn({ name: 'id_utilisateur', referencedColumnName: 'id' })
|
||||
user?: Users;
|
||||
|
||||
@Column({ type: 'varchar', length: 50, name: 'type', nullable: true })
|
||||
type: string;
|
||||
|
||||
@Column({
|
||||
type: 'enum',
|
||||
enum: StatutValidationType,
|
||||
enumName: 'statut_validation_type',
|
||||
name: 'statut',
|
||||
default: StatutValidationType.EN_ATTENTE
|
||||
})
|
||||
status: StatutValidationType;
|
||||
|
||||
@ManyToOne(() => Users, { nullable: true })
|
||||
@JoinColumn({ name: 'valide_par', referencedColumnName: 'id' })
|
||||
validated_by?: Users;
|
||||
|
||||
@Column( { name: 'commentaire', type: 'text', nullable: true })
|
||||
comment?: string;
|
||||
|
||||
@CreateDateColumn({ name: 'cree_le', type: 'timestamptz' })
|
||||
created_at: Date;
|
||||
|
||||
@UpdateDateColumn({ name: 'modifie_le', type: 'timestamptz' })
|
||||
updated_at: Date;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user