refactor(backend): add output DTOs for existing endpoints

This commit is contained in:
SaidSoighiri94
2026-06-22 10:46:50 +02:00
parent b5a7577e8d
commit 101e52236f
7 changed files with 110 additions and 6 deletions
@@ -1,6 +1,7 @@
import { Request, Response } from 'express';
import { AppError } from '../errors/app-error';
import { getProfil, identifierParCarte } from '../services/utilisateur.service';
import { toUtilisateurDto } from '../dtos/utilisateur.dto';
export async function getMe(req: Request, res: Response): Promise<void> {
const user = req.user;
@@ -9,7 +10,7 @@ export async function getMe(req: Request, res: Response): Promise<void> {
}
const profil = await getProfil(user.id);
res.json({ data: profil });
res.json({ data: toUtilisateurDto(profil) });
}
export async function identifier(req: Request, res: Response): Promise<void> {
@@ -19,5 +20,5 @@ export async function identifier(req: Request, res: Response): Promise<void> {
}
const profil = await identifierParCarte(qr);
res.json({ data: profil });
res.json({ data: toUtilisateurDto(profil) });
}
@@ -1,6 +1,7 @@
import { Request, Response } from 'express';
import { AppError } from '../errors/app-error';
import { listerMesEmpruntsEnCours } from '../services/emprunt.service';
import { toEmpruntDto } from '../dtos/emprunt.dto';
export async function getMesEmprunts(req: Request, res: Response): Promise<void> {
const user = req.user;
@@ -9,5 +10,5 @@ export async function getMesEmprunts(req: Request, res: Response): Promise<void>
}
const emprunts = await listerMesEmpruntsEnCours(user.id);
res.json({ data: emprunts });
res.json({ data: emprunts.map(toEmpruntDto) });
}
@@ -1,6 +1,7 @@
import { Request, Response } from 'express';
import { AppError } from '../errors/app-error';
import { listerCatalogue } from '../services/materiel.service';
import { toMaterielDto } from '../dtos/materiel.dto';
function parseCategorieId(value: unknown): number | undefined {
if (value === undefined) {
@@ -25,5 +26,5 @@ export async function getCatalogue(req: Request, res: Response): Promise<void> {
const categorieId = parseCategorieId(req.query.categorieId);
const materiels = await listerCatalogue(user.campusId, { categorieId, recherche });
res.json({ data: materiels });
res.json({ data: materiels.map(toMaterielDto) });
}
+22
View File
@@ -0,0 +1,22 @@
import { EmpruntAvecMateriel } from '../repositories/emprunt.repository';
import { MaterielDto, toMaterielDto } from './materiel.dto';
export interface EmpruntDto {
id: number;
dateEmprunt: Date;
dateRetourPrevue: Date;
dateRetourReelle: Date | null;
statut: string;
materiel: MaterielDto;
}
export function toEmpruntDto(emprunt: EmpruntAvecMateriel): EmpruntDto {
return {
id: emprunt.id,
dateEmprunt: emprunt.dateEmprunt,
dateRetourPrevue: emprunt.dateRetourPrevue,
dateRetourReelle: emprunt.dateRetourReelle,
statut: emprunt.statut,
materiel: toMaterielDto(emprunt.materiel),
};
}
+33
View File
@@ -0,0 +1,33 @@
import { MaterielAvecCategorie } from '../repositories/materiel.repository';
export interface CategorieDto {
id: number;
nom: string;
}
export interface MaterielDto {
id: number;
nom: string;
marque: string;
modele: string;
reference: string;
statut: string;
etatGeneral: string;
categorie: CategorieDto;
}
export function toMaterielDto(materiel: MaterielAvecCategorie): MaterielDto {
return {
id: materiel.id,
nom: materiel.nom,
marque: materiel.marque,
modele: materiel.modele,
reference: materiel.reference,
statut: materiel.statut,
etatGeneral: materiel.etatGeneral,
categorie: {
id: materiel.categorie.id,
nom: materiel.categorie.nom,
},
};
}
+41
View File
@@ -0,0 +1,41 @@
import { UtilisateurProfil } from '../repositories/utilisateur.repository';
export interface RoleDto {
code: string;
libelle: string;
}
export interface CampusDto {
id: number;
nom: string;
ville: string;
}
export interface UtilisateurDto {
id: number;
nom: string;
prenom: string;
email: string;
classe: string | null;
role: RoleDto;
campus: CampusDto;
}
export function toUtilisateurDto(utilisateur: UtilisateurProfil): UtilisateurDto {
return {
id: utilisateur.id,
nom: utilisateur.nom,
prenom: utilisateur.prenom,
email: utilisateur.email,
classe: utilisateur.classe,
role: {
code: utilisateur.role.code,
libelle: utilisateur.role.libelle,
},
campus: {
id: utilisateur.campus.id,
nom: utilisateur.campus.nom,
ville: utilisateur.campus.ville,
},
};
}