feat(backend): add GET /api/mes-emprunts endpoint

This commit is contained in:
SaidSoighiri94
2026-06-19 11:38:40 +02:00
parent bee21b9fd8
commit 20490a05c5
6 changed files with 55 additions and 1 deletions
@@ -0,0 +1,13 @@
import { Request, Response } from 'express';
import { AppError } from '../errors/app-error';
import { listerMesEmpruntsEnCours } from '../services/emprunt.service';
export async function getMesEmprunts(req: Request, res: Response): Promise<void> {
const user = req.user;
if (!user) {
throw new AppError(401, 'Authentification requise');
}
const emprunts = await listerMesEmpruntsEnCours(user.id);
res.json({ data: emprunts });
}
@@ -0,0 +1,20 @@
import { Prisma } from '@prisma/client';
import { prisma } from '../db/prisma';
import { StatutEmprunt } from '../models/enums';
export type EmpruntAvecMateriel = Prisma.EmpruntGetPayload<{
include: { materiel: { include: { categorie: true } } };
}>;
const STATUTS_EN_COURS: StatutEmprunt[] = ['EN_COURS', 'EN_RETARD'];
export function findEnCoursParUtilisateur(utilisateurId: number): Promise<EmpruntAvecMateriel[]> {
return prisma.emprunt.findMany({
where: {
utilisateurId,
statut: { in: STATUTS_EN_COURS },
},
include: { materiel: { include: { categorie: true } } },
orderBy: { dateRetourPrevue: 'asc' },
});
}
+6
View File
@@ -0,0 +1,6 @@
import { Router } from 'express';
import { getMesEmprunts } from '../controllers/emprunt.controller';
export const empruntRoutes: Router = Router();
empruntRoutes.get('/', getMesEmprunts);
+2
View File
@@ -1,8 +1,10 @@
import { Router } from 'express';
import { currentUser } from '../middlewares/current-user';
import { materielRoutes } from './materiel.routes';
import { empruntRoutes } from './emprunt.routes';
export const apiRouter: Router = Router();
apiRouter.use(currentUser);
apiRouter.use('/materiels', materielRoutes);
apiRouter.use('/mes-emprunts', empruntRoutes);
@@ -0,0 +1,7 @@
import { findEnCoursParUtilisateur, EmpruntAvecMateriel } from '../repositories/emprunt.repository';
/* RG15 : un étudiant ne consulte que ses propres emprunts, et uniquement ceux
non encore restitués (en cours ou en retard). */
export function listerMesEmpruntsEnCours(utilisateurId: number): Promise<EmpruntAvecMateriel[]> {
return findEnCoursParUtilisateur(utilisateurId);
}