feat(backend): add responsable dashboard endpoint
This commit is contained in:
@@ -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,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user