forked from Ynov/ptitspas-ynov-back
110 lines
2.6 KiB
TypeScript
110 lines
2.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',
|
|
}
|
|
|
|
//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',
|
|
}
|
|
|
|
//Declaration de l'entite utilisateur
|
|
@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 de la db psql
|
|
nullable: true,
|
|
name: 'genre'
|
|
})
|
|
gender?: 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'
|
|
})
|
|
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[];
|
|
}
|