Specialty

Suivi de la progression des apprenants par spécialité (séquence ordonnée de projets). Une spécialité = une liste de projets à terminer dans un ordre défini.

Source : src/api/v1/specialty.ts, src/services/projects.ts (constante specialties).


Lister les spécialités disponibles

GET/api/v1/specialtiessource ↗

Réponse 200

[
  {
    "name": "cybersecurity",
    "totalProjects": 11,
    "projects": [
      "Passive", "Inspector-Image", "Active", "Local",
      "Web-Hack", "Injector", "Hole-In-Bin", "Mal-Track",
      "Evasion", "Obfuscator", "Malware"
    ]
  },
  {
    "name": "ai",
    "totalProjects": 5,
    "projects": [
      "Kaggle-Titanic", "NLP-Scrapper", "Emotions-Detector",
      "SP500-Strategies", "Credit-Scoring"
    ]
  }
]

Spécialités existantes

SlugNb de projets
cybersecurity11
ai5
blockchain4
devops7
game9
mobile-application6

Étudiants d’une spécialité

GET/api/v1/specialties/:name/studentssource ↗

Renvoie la liste des étudiants ayant un avancement détecté sur les projets de la spécialité, avec leur progression calculée (projet courant inclus).

Paramètres

NomTypeLocalisationDescription
namestringpathSlug de la spécialité (cf. tableau ci-dessus)
eventIdnumberquery(optionnel) Filtre sur l’event.id 01 Edu

Réponse 200

{
  "specialty": "cybersecurity",
  "totalProjects": 11,
  "projectsList": ["Passive", "Inspector-Image", "..."],
  "studentsCount": 7,
  "students": [
    {
      "login": "alice",
      "firstName": "Alice",
      "lastName": "Martin",
      "completedProjects": ["Passive", "Inspector-Image"],
      "currentProject": "Active",
      "progression": { "current": 3, "total": 11 },
      "projects": [
        { "name": "Passive", "grade": 1, "status": "finished" },
        { "name": "Inspector-Image", "grade": 1, "status": "finished" },
        { "name": "Active", "grade": null, "status": "working" }
      ]
    }
  ]
}

Calcul de la progression

  • completedProjects = projets terminés avec status=finished ET grade > 0.
  • currentProject = dernier projet rencontré avec status ∈ {working, setup, audit}.
  • progression.current = len(completedProjects) + (1 si currentProject) (cap à totalProjects).

Erreurs

CodeCause
400name absent
404Spécialité inconnue (le payload renvoie la liste valide)
500Erreur GraphQL 01 Edu

Exemple

curl $API/api/v1/specialties/cybersecurity/students?eventId=72