feat(backend): add responsable stock endpoint

This commit is contained in:
SaidSoighiri94
2026-07-15 12:35:16 +02:00
parent 2c81bd7208
commit c76f546f2a
6 changed files with 162 additions and 3 deletions
@@ -6,11 +6,13 @@ import {
countNotificationsNonLues,
findActiviteRecente,
findEmpruntsResponsable,
findMaterielsResponsable,
StatutCount,
ActiviteResponsable,
EmpruntResponsable,
MaterielResponsable,
} from '../repositories/responsable.repository';
import { STATUT_EMPRUNT, StatutEmprunt } from '../models/enums';
import { STATUT_EMPRUNT, STATUT_MATERIEL, StatutEmprunt, StatutMateriel } from '../models/enums';
export interface DashboardResponsableData {
materiels: StatutCount[];
@@ -24,6 +26,12 @@ export interface ListerEmpruntsResponsableFiltres {
statut?: StatutEmprunt;
}
export interface ListerMaterielsResponsableFiltres {
statut?: StatutMateriel;
categorieId?: number;
recherche?: string;
}
function verifierResponsable(roleCode: string): void {
if (roleCode !== 'RESPONSABLE') {
throw new AppError(403, 'Acces reserve au responsable materiel');
@@ -65,6 +73,29 @@ export function parseStatutEmprunt(value: unknown): StatutEmprunt | undefined {
return value as StatutEmprunt;
}
export function parseStatutMateriel(value: unknown): StatutMateriel | undefined {
if (value === undefined) {
return undefined;
}
if (typeof value !== 'string' || !(STATUT_MATERIEL as readonly string[]).includes(value)) {
throw new AppError(400, 'statut invalide');
}
return value as StatutMateriel;
}
export function parseCategorieId(value: unknown): number | undefined {
if (value === undefined) {
return undefined;
}
const parsed = Number(value);
if (!Number.isInteger(parsed) || parsed <= 0) {
throw new AppError(400, 'categorieId invalide');
}
return parsed;
}
export function listerEmpruntsResponsable(
roleCode: string,
campusId: number,
@@ -73,3 +104,12 @@ export function listerEmpruntsResponsable(
verifierResponsable(roleCode);
return findEmpruntsResponsable(campusId, filtres);
}
export function listerMaterielsResponsable(
roleCode: string,
campusId: number,
filtres: ListerMaterielsResponsableFiltres,
): Promise<MaterielResponsable[]> {
verifierResponsable(roleCode);
return findMaterielsResponsable(campusId, filtres);
}