import { desc, eq } from "drizzle-orm"; import { getDb } from "./db"; import { historiqueAttestations, sequences, apprenants, formations } from "../drizzle/schema"; /** * Enregistrer un envoi d'attestation dans l'historique */ export async function enregistrerEnvoiAttestation(data: { sequenceId: number; apprenantId: number; statut: "envoye" | "erreur"; messageErreur?: string; urlAttestation?: string; }) { const db = await getDb(); if (!db) throw new Error("Database not available"); await db.insert(historiqueAttestations).values({ sequenceId: data.sequenceId, apprenantId: data.apprenantId, statut: data.statut, messageErreur: data.messageErreur || null, urlAttestation: data.urlAttestation || null, }); } /** * Récupérer l'historique des envois d'attestations * Avec les informations de la séquence, formation et apprenant */ export async function getHistoriqueAttestations() { const db = await getDb(); if (!db) return []; const results = await db .select({ id: historiqueAttestations.id, dateEnvoi: historiqueAttestations.dateEnvoi, statut: historiqueAttestations.statut, messageErreur: historiqueAttestations.messageErreur, urlAttestation: historiqueAttestations.urlAttestation, sequence: { id: sequences.id, nom: sequences.nom, }, formation: { id: formations.id, nom: formations.nom, }, apprenant: { id: apprenants.id, nom: apprenants.nom, prenom: apprenants.prenom, email: apprenants.email, }, }) .from(historiqueAttestations) .innerJoin(sequences, eq(historiqueAttestations.sequenceId, sequences.id)) .innerJoin(formations, eq(sequences.formationId, formations.id)) .innerJoin(apprenants, eq(historiqueAttestations.apprenantId, apprenants.id)) .orderBy(desc(historiqueAttestations.dateEnvoi)); return results; } /** * Récupérer l'historique des attestations pour une séquence spécifique */ export async function getHistoriqueAttestationsBySequence(sequenceId: number) { const db = await getDb(); if (!db) return []; const results = await db .select({ id: historiqueAttestations.id, dateEnvoi: historiqueAttestations.dateEnvoi, statut: historiqueAttestations.statut, messageErreur: historiqueAttestations.messageErreur, urlAttestation: historiqueAttestations.urlAttestation, apprenant: { id: apprenants.id, nom: apprenants.nom, prenom: apprenants.prenom, email: apprenants.email, }, }) .from(historiqueAttestations) .innerJoin(apprenants, eq(historiqueAttestations.apprenantId, apprenants.id)) .where(eq(historiqueAttestations.sequenceId, sequenceId)) .orderBy(desc(historiqueAttestations.dateEnvoi)); return results; }