diff --git a/client/src/pages/admin/AdminRappelsHistorique.tsx b/client/src/pages/admin/AdminRappelsHistorique.tsx index b22e11b..4997a93 100644 --- a/client/src/pages/admin/AdminRappelsHistorique.tsx +++ b/client/src/pages/admin/AdminRappelsHistorique.tsx @@ -13,8 +13,20 @@ import { } from "@/components/ui/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from "@/components/ui/alert-dialog"; import { trpc } from "@/lib/trpc"; -import { History, Search, Filter, ChevronLeft, ChevronRight } from "lucide-react"; +import { History, Search, Filter, ChevronLeft, ChevronRight, Trash2 } from "lucide-react"; +import { toast } from "sonner"; import { format } from "date-fns"; import { fr } from "date-fns/locale"; @@ -31,6 +43,17 @@ export default function AdminRappelsHistorique() { const { data: logs, isLoading } = trpc.rappels.historique.useQuery(filtres); const { data: sequences } = trpc.sequences.list.useQuery(); + const utils = trpc.useUtils(); + + const viderHistorique = trpc.rappels.viderHistoriqueRappels.useMutation({ + onSuccess: (data) => { + toast.success(data.message); + utils.rappels.historique.invalidate(); + }, + onError: (error) => { + toast.error(`Erreur: ${error.message}`); + }, + }); const handleFilterChange = (key: string, value: any) => { setFiltres(prev => ({ @@ -69,7 +92,34 @@ export default function AdminRappelsHistorique() { Consultez tous les rappels envoyés avec filtres avancés

- +
+ + + + + + + Êtes-vous absolument sûr ? + + Cette action est irréversible. Tous les logs d'historique des rappels seront définitivement supprimés de la base de données. + + + + Annuler + viderHistorique.mutate()} + className="bg-destructive text-destructive-foreground hover:bg-destructive/90" + > + Oui, vider l'historique + + + + + +
{/* Filtres */} diff --git a/server/routers.ts b/server/routers.ts index aff78ca..b348578 100644 --- a/server/routers.ts +++ b/server/routers.ts @@ -1568,6 +1568,26 @@ export const appRouter = router({ message: `${nbSupprimes} log(s) erroné(s) supprimé(s)`, }; }), + + // Vider complètement la table des logs de rappels + viderHistoriqueRappels: adminProcedure + .mutation(async () => { + const database = await db.getDb(); + if (!database) throw new Error("Database not available"); + + // Supprimer tous les logs de rappels + const result = await database.execute(sql` + DELETE FROM logsRappels + `); + + const nbSupprimes = Array.isArray(result) ? 0 : (result as any).affectedRows || 0; + + return { + success: true, + nbSupprimes, + message: `${nbSupprimes} log(s) supprimé(s) de l'historique`, + }; + }), }), emailConfig: router({ @@ -2530,6 +2550,7 @@ export const appRouter = router({ return { success: true }; }), + }), }); diff --git a/todo.md b/todo.md index f87d4b4..ccbef30 100644 --- a/todo.md +++ b/todo.md @@ -836,3 +836,6 @@ - [x] Ajouter une colonne "Type d'envoi" avec badge coloré dans l'interface d'historique des rappels - [x] Nettoyer les anciens logs erronés de la base de données - [x] Corriger les erreurs TypeScript critiques liées aux types null/undefined (réduction de 115 à 88 erreurs) +- [x] Diagnostiquer pourquoi le rappel J+2 pour la séquence Test3 n'a pas été envoyé à opareige@gmail.com (déjà envoyé automatiquement) +- [x] Corriger l'erreur de connexion à la base de données qui empêche adminServFormation de se connecter (PM2 ne chargeait pas le fichier .env) +- [x] Ajouter un bouton pour vider la table des logs d'historique des rappels avec une boîte de dialogue de confirmation