Checkpoint: Évolution v6 complète : onglets Éditeurs et Blocs fonctionnels dans Admin (CRUD complet), page Tableau de bord statistiques avec graphiques Recharts (KPIs, barres par bloc/région, camembert état déploiement, top 10 solutions), lien dans la sidebar réservé aux gestionnaires. 33 tests Vitest passés, 0 erreur TypeScript.

This commit is contained in:
Manus
2026-04-17 11:11:15 -04:00
parent cbd439bac7
commit 5801ba4add
7 changed files with 840 additions and 1 deletions

View File

@@ -5,11 +5,16 @@ import {
authenticateLocalUser,
createDemandeContact,
createBlocFonctionnel,
updateBlocFonctionnel,
deleteBlocFonctionnel,
createEditeur,
updateEditeur,
deleteEditeur,
createLocalUser,
createSolution,
updateSolution,
deleteSolution,
getStatistiques,
deleteLogicielEtablissement,
deleteUser,
getAllDemandes,
@@ -141,6 +146,19 @@ export const appRouter = router({
const isGestionnaire = ctx.user.sonumRole === "gestionnaire" || ctx.user.role === "admin";
return createBlocFonctionnel(input.nom, isGestionnaire);
}),
updateBlocFonctionnel: gestionnaireProcedure
.input(z.object({ id: z.number().int(), nom: z.string().min(1) }))
.mutation(({ input }) => updateBlocFonctionnel(input.id, input.nom)),
deleteBlocFonctionnel: gestionnaireProcedure
.input(z.object({ id: z.number().int() }))
.mutation(({ input }) => deleteBlocFonctionnel(input.id)),
updateEditeur: gestionnaireProcedure
.input(z.object({ id: z.number().int(), nom: z.string().min(1) }))
.mutation(({ input }) => updateEditeur(input.id, input.nom)),
deleteEditeur: gestionnaireProcedure
.input(z.object({ id: z.number().int() }))
.mutation(({ input }) => deleteEditeur(input.id)),
statistiques: gestionnaireProcedure.query(() => getStatistiques()),
createSolution: protectedProcedure
.input(z.object({