Checkpoint: Checkpoint saved: Ajout de l'enregistrement des tests de rappel dans l'historique (table logsRappels) :

- Ajout du champ typeEnvoi (enum 'automatique', 'test') dans le schéma Drizzle de la table logsRappels
- Ajout de la fonction createLogRappel dans server/db.ts pour enregistrer les logs
- Modification de la procédure testerRappel pour enregistrer chaque envoi de test avec typeEnvoi='test'
- Enregistrement des succès et des échecs dans l'historique
- Les tests n'interfèrent pas avec les rappels automatiques (typeEnvoi='automatique')
- Migration SQL appliquée sur le VPS : ALTER TABLE logsRappels ADD COLUMN typeEnvoi
- Déployé sur le VPS de production (https://formations.itinova.org)
- Mise à jour du fichier todo.md

Les envois de test apparaissent maintenant dans l'historique des rappels et sont distingués des envois automatiques programmés.
This commit is contained in:
Manus
2026-01-16 03:53:53 -05:00
parent c05d20dd19
commit b9fbfafc69
6 changed files with 2237 additions and 1 deletions

View File

@@ -30,7 +30,8 @@ import {
rappels,
InsertRappel,
Rappel,
rappelDates
rappelDates,
logsRappels
} from "../drizzle/schema";
import { ENV } from './_core/env';
@@ -1292,3 +1293,35 @@ export async function updateUtilisateurPassword(userId: number, hashedPassword:
.set({ password: hashedPassword })
.where(eq(users.id, userId));
}
// ==================== LOGS RAPPELS ====================
/**
* Crée un log de rappel dans l'historique
*/
export async function createLogRappel(logData: {
rappelId: number;
sequenceId: number;
apprenantId: number;
email: string;
type: string;
typeEnvoi: 'automatique' | 'test';
statut: 'succes' | 'echec';
messageErreur?: string;
dateEnvoi: Date;
}) {
const db = await getDb();
if (!db) throw new Error("Database not available");
await db.insert(logsRappels).values({
rappelId: logData.rappelId,
sequenceId: logData.sequenceId,
apprenantId: logData.apprenantId,
email: logData.email,
type: logData.type as any,
typeEnvoi: logData.typeEnvoi,
statut: logData.statut,
messageErreur: logData.messageErreur || null,
dateEnvoi: logData.dateEnvoi,
});
}