Suivi de progression d’une promotion
Cas d’usage : afficher pour une promotion son avancement complet — projets du tronc commun, optionnels, additionnels et spécialités — dans un dashboard ou un bot Discord.
1. Récupérer l’eventId de la promotion
Soit depuis la table de configuration interne :
curl $API/api/v1/promo-configs/p1-2024
# → { "key": "p1-2024", "eventId": 72, ... }L’eventId (ici 72) correspond à l’event.id côté GraphQL 01 Edu.
2. Charger les trois listes de progression
Les trois endpoints suivants ont la même forme et peuvent être appelés en parallèle :
curl /api/v1/promotions/72/students # tronc commun
curl /api/v1/promotions/72/students/optionals # optionnels
curl /api/v1/promotions/72/students/additionals # additionnelsChaque réponse retourne { progress: [...] } où chaque entrée décrit un
groupe-projet d’un apprenant (statut, date de début, audits, résultats).
⚠️ La liste additionals ne contient pas
firstName/lastName. Si tu en as besoin pour l’affichage, croise avec le payloadstudents(tronc commun) qui les inclut.
3. Agréger par étudiant
Côté client, regroupe les entrées par user.login puis dérive :
- Projets terminés :
entries.filter(e => e.group.status === "finished" && e.grade > 0).length. - Projet en cours : dernière entrée avec
status ∈ {working, setup, audit}. - Pourcentage :
terminés / nombre_total_de_projets_attendus.
Cette logique est déjà implémentée côté serveur pour les spécialités — voir
/api/v1/specialties/:name/students.
4. Suivi par spécialité
Pour les apprenants en phase de spécialisation :
curl /api/v1/specialties/cybersecurity/students?eventId=72La réponse inclut directement progression: { current, total } par
étudiant — pas besoin d’agrégation supplémentaire.
5. Exclure les périodes de vacances
Pour ne pas pénaliser un retard pendant une période scolaire fermée, charge la liste des vacances et soustrais-la lors du calcul de jours ouvrés :
curl /api/v1/holidays
# → [{ "label": "...", "start": "2024-12-21", "end": "2025-01-05" }, ...]Statuts de groupe pris en compte
Toutes les routes de progression filtrent uniquement sur les statuts
setup, working, audit, finished. Un groupe abandonné (failed,
expired) n’apparaît pas dans le payload.