100 lines
2.3 KiB
TypeScript
100 lines
2.3 KiB
TypeScript
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;
|
|
};
|
|
}>;
|
|
|
|
export type EmpruntResponsable = Prisma.EmpruntGetPayload<{
|
|
include: {
|
|
utilisateur: true;
|
|
materiel: { include: { categorie: true } };
|
|
};
|
|
}>;
|
|
|
|
export interface EmpruntResponsableFiltres {
|
|
statut?: string;
|
|
}
|
|
|
|
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,
|
|
});
|
|
}
|
|
|
|
export function findEmpruntsResponsable(
|
|
campusId: number,
|
|
filtres: EmpruntResponsableFiltres,
|
|
): Promise<EmpruntResponsable[]> {
|
|
return prisma.emprunt.findMany({
|
|
where: {
|
|
campusId,
|
|
...(filtres.statut ? { statut: filtres.statut } : {}),
|
|
},
|
|
include: {
|
|
utilisateur: true,
|
|
materiel: { include: { categorie: true } },
|
|
},
|
|
orderBy: { dateEmprunt: 'desc' },
|
|
});
|
|
}
|