Checkpoint: Création d'un tableau de bord analytique avancé avec graphiques interactifs (Recharts). Affiche les statistiques globales, l'évolution temporelle des inscriptions par mois, le taux de remplissage des séquences, le top 10 des établissements participants et la répartition par fonction. Accessible via le menu "Tableau de bord analytique".
This commit is contained in:
@@ -5,6 +5,7 @@ import { publicProcedure, protectedProcedure, router } from "./_core/trpc";
|
||||
import { parseLocalDateTime } from "./dateUtils";
|
||||
import { z } from "zod";
|
||||
import * as db from "./db";
|
||||
import * as analyticsDb from "./analyticsDb";
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import { sendInscriptionConfirmation, sendGroupEmail } from "./emailService";
|
||||
import { generateExcelExport, generatePDFExport, generateFeuillePresence } from "./exportService";
|
||||
@@ -828,6 +829,36 @@ export const appRouter = router({
|
||||
}
|
||||
}),
|
||||
}),
|
||||
|
||||
// ===== ANALYTICS =====
|
||||
analytics: router({
|
||||
globalStats: adminProcedure.query(async () => {
|
||||
return analyticsDb.getGlobalStats();
|
||||
}),
|
||||
|
||||
inscriptionsByMonth: adminProcedure
|
||||
.input(z.object({
|
||||
startDate: z.string().optional(),
|
||||
endDate: z.string().optional(),
|
||||
}))
|
||||
.query(async ({ input }) => {
|
||||
const startDate = input.startDate ? new Date(input.startDate) : undefined;
|
||||
const endDate = input.endDate ? new Date(input.endDate) : undefined;
|
||||
return analyticsDb.getInscriptionsByMonth(startDate, endDate);
|
||||
}),
|
||||
|
||||
tauxRemplissageByMonth: adminProcedure.query(async () => {
|
||||
return analyticsDb.getTauxRemplissageByMonth();
|
||||
}),
|
||||
|
||||
participationByEtablissement: adminProcedure.query(async () => {
|
||||
return analyticsDb.getParticipationByEtablissement();
|
||||
}),
|
||||
|
||||
participationByFonction: adminProcedure.query(async () => {
|
||||
return analyticsDb.getParticipationByFonction();
|
||||
}),
|
||||
}),
|
||||
});
|
||||
|
||||
export type AppRouter = typeof appRouter;
|
||||
|
||||
Reference in New Issue
Block a user