Checkpoint: Ajout d'une validation backend dans les procédures create et update des séquences pour garantir que la date de fin soit toujours après la date de début pour toutes les dates de formation. Cela empêche la création de fichiers ICS invalides.

This commit is contained in:
Manus
2026-01-23 08:57:41 -05:00
parent 437ea58959
commit 95245b38e8
4 changed files with 66 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
{
"query": "SELECT df.id, df.sequenceId, df.dateDebut, df.dateFin, df.ordre, s.nom as sequenceNom\nFROM datesFormation df\nJOIN sequences s ON df.sequenceId = s.id\nWHERE s.nom = 'Groupe A'\nORDER BY df.ordre;",
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute SELECT df.id, df.sequenceId, df.dateDebut, df.dateFin, df.ordre, s.nom as sequenceNom\nFROM datesFormation df\nJOIN sequences s ON df.sequenceId = s.id\nWHERE s.nom = 'Groupe A'\nORDER BY df.ordre;",
"rows": [
{
"id": "900001",
"sequenceId": "30001",
"dateDebut": "2025-11-20 12:48:00",
"dateFin": "2025-11-21 06:48:00",
"ordre": "1",
"sequenceNom": "Groupe A"
},
{
"id": "900002",
"sequenceId": "30001",
"dateDebut": "2025-12-17 12:46:00",
"dateFin": "2025-12-17 21:46:00",
"ordre": "2",
"sequenceNom": "Groupe A"
}
],
"messages": [],
"stdout": "id\tsequenceId\tdateDebut\tdateFin\tordre\tsequenceNom\n900001\t30001\t2025-11-20 12:48:00\t2025-11-21 06:48:00\t1\tGroupe A\n900002\t30001\t2025-12-17 12:46:00\t2025-12-17 21:46:00\t2\tGroupe A\n",
"stderr": "",
"execution_time_ms": 115
}

View File

@@ -223,6 +223,19 @@ export default function AdminSequences() {
return;
}
// Valider que chaque date de fin est après la date de début
for (let i = 0; i < formData.dates.length; i++) {
const date = formData.dates[i];
if (date.dateDebut && date.dateFin) {
const debut = new Date(date.dateDebut);
const fin = new Date(date.dateFin);
if (fin <= debut) {
toast.error(`Date ${i + 1}: La date de fin doit être après la date de début`);
return;
}
}
}
const data = {
formationId: parseInt(formData.formationId),
nom: formData.nom,

View File

@@ -454,6 +454,18 @@ export const appRouter = router({
})).mutation(async ({ input }) => {
const { dates, ...sequenceData } = input;
// Valider que chaque date de fin est après la date de début
for (const date of dates) {
const debut = new Date(date.dateDebut);
const fin = new Date(date.dateFin);
if (fin <= debut) {
throw new TRPCError({
code: 'BAD_REQUEST',
message: 'La date de fin doit être après la date de début pour toutes les dates de formation',
});
}
}
// Créer la séquence
const result = await db.createSequence({
...sequenceData,
@@ -496,6 +508,18 @@ export const appRouter = router({
console.log('[UPDATE SEQUENCE] Input reçu:', JSON.stringify(input, null, 2));
// Valider que chaque date de fin est après la date de début
for (const date of dates) {
const debut = new Date(date.dateDebut);
const fin = new Date(date.dateFin);
if (fin <= debut) {
throw new TRPCError({
code: 'BAD_REQUEST',
message: 'La date de fin doit être après la date de début pour toutes les dates de formation',
});
}
}
// Mettre à jour la séquence
const updateData: any = {
...sequenceData,

View File

@@ -1194,3 +1194,6 @@
- [x] Corriger l'erreur 'Aucun rappel actif configuré' lors du test de rappels
- [x] Désactiver visuellement le bouton de test pour les séquences sans rappels actifs
- [x] Ajouter un badge de compteur sur le bouton de test indiquant le nombre de rappels actifs
- [x] Corriger l'erreur 'Unexpected token' lors de la mutation API sur /admin/sequences
- [ ] Corriger l'erreur dans le fichier ICS qui empêche l'importation dans Outlook
- [ ] Ajouter validation date fin > date début dans la boîte de dialogue de modification des séquences