feat(backend): add responsable dashboard endpoint

This commit is contained in:
SaidSoighiri94
2026-07-15 11:04:09 +02:00
parent e2165b9826
commit a3795b41a0
7 changed files with 230 additions and 1 deletions
@@ -0,0 +1,71 @@
import { Prisma } from '@prisma/client';
import { prisma } from '../db/prisma';
export interface StatutCount {
statut: string;
count: number;
}
export type ActiviteResponsable = Prisma.HistoriqueGetPayload<{
include: {
utilisateur: true;
materiel: true;
emprunt: true;
};
}>;
function mapStatutCounts(rows: Array<{ statut: string; _count: { _all: number } }>): StatutCount[] {
return rows.map((row) => ({ statut: row.statut, count: row._count._all }));
}
export async function countMaterielsParStatut(campusId: number): Promise<StatutCount[]> {
const rows = await prisma.materiel.groupBy({
by: ['statut'],
where: { campusId, actif: true },
_count: { _all: true },
});
return mapStatutCounts(rows);
}
export async function countEmpruntsParStatut(campusId: number): Promise<StatutCount[]> {
const rows = await prisma.emprunt.groupBy({
by: ['statut'],
where: { campusId },
_count: { _all: true },
});
return mapStatutCounts(rows);
}
export async function countAnomaliesParStatut(campusId: number): Promise<StatutCount[]> {
const rows = await prisma.anomalie.groupBy({
by: ['statut'],
where: { emprunt: { campusId } },
_count: { _all: true },
});
return mapStatutCounts(rows);
}
export function countNotificationsNonLues(utilisateurId: number): Promise<number> {
return prisma.notification.count({
where: { utilisateurId, lu: false },
});
}
export function findActiviteRecente(
campusId: number,
limite: number,
): Promise<ActiviteResponsable[]> {
return prisma.historique.findMany({
where: { campusId },
include: {
utilisateur: true,
materiel: true,
emprunt: true,
},
orderBy: { dateAction: 'desc' },
take: limite,
});
}