151 lines
3.6 KiB
TypeScript
151 lines
3.6 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',
|
|
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[];
|
|
}
|