Checkpoint: Correction finale de l'affichage vide des apprenants dans la gestion des attestations. Problème résolu en aplatissant la structure de la requête Drizzle ORM (structure imbriquée non supportée) et en restructurant les résultats côté serveur.

This commit is contained in:
Manus
2026-01-25 09:06:36 -05:00
parent f51e027a5c
commit 8e20ac40dd
2 changed files with 42 additions and 23 deletions

View File

@@ -161,26 +161,22 @@ export async function getApprenantsWithAttestationStatus(formationId: number) {
const results = await db const results = await db
.select({ .select({
apprenant: { // Apprenant
id: apprenants.id, apprenantId: apprenants.id,
nom: apprenants.nom, apprenantNom: apprenants.nom,
prenom: apprenants.prenom, apprenantPrenom: apprenants.prenom,
email: apprenants.email, apprenantEmail: apprenants.email,
}, // Inscription
inscription: { inscriptionId: inscriptions.id,
id: inscriptions.id, inscriptionSequenceId: inscriptions.sequenceId,
sequenceId: inscriptions.sequenceId, // Sequence
}, sequenceId: sequences.id,
sequence: { sequenceNom: sequences.nom,
id: sequences.id, // Attestation
nom: sequences.nom, attestationId: attestations.id,
}, attestationDocumentUrl: attestations.documentUrl,
attestation: { attestationEmailEnvoye: attestations.emailEnvoye,
id: attestations.id, attestationDateEnvoiEmail: attestations.dateEnvoiEmail,
documentUrl: attestations.documentUrl,
emailEnvoye: attestations.emailEnvoye,
dateEnvoiEmail: attestations.dateEnvoiEmail,
},
}) })
.from(inscriptions) .from(inscriptions)
.innerJoin(apprenants, eq(inscriptions.apprenantId, apprenants.id)) .innerJoin(apprenants, eq(inscriptions.apprenantId, apprenants.id))
@@ -194,7 +190,29 @@ export async function getApprenantsWithAttestationStatus(formationId: number) {
) )
.orderBy(apprenants.nom, apprenants.prenom); .orderBy(apprenants.nom, apprenants.prenom);
return results; // Restructurer les résultats au format attendu
return results.map(r => ({
apprenant: {
id: r.apprenantId,
nom: r.apprenantNom,
prenom: r.apprenantPrenom,
email: r.apprenantEmail,
},
inscription: {
id: r.inscriptionId,
sequenceId: r.inscriptionSequenceId,
},
sequence: {
id: r.sequenceId,
nom: r.sequenceNom,
},
attestation: r.attestationId ? {
id: r.attestationId,
documentUrl: r.attestationDocumentUrl,
emailEnvoye: r.attestationEmailEnvoye,
dateEnvoiEmail: r.attestationDateEnvoiEmail,
} : null,
}));
} }
/** /**

View File

@@ -1282,6 +1282,7 @@
## Corriger l'affichage vide de la liste des apprenants après le tri chronologique ## Corriger l'affichage vide de la liste des apprenants après le tri chronologique
- [x] Identifier la cause du problème (champ premiereDate inexistant) - [x] Identifier la cause du problème (structure imbriquée Drizzle ORM)
- [x] Corriger le code de regroupement/tri (utiliser l'ID de séquence) - [x] Corriger le code backend (aplatir la structure de la requête)
- [x] Corriger le code frontend (utiliser l'ID de séquence pour le tri)
- [ ] Déployer sur le VPS - [ ] Déployer sur le VPS