Aller au contenu

EPIDOCS — Backend

Description

Le backend EPIDOCS est une API REST développée en Django (Django REST Framework) qui gère l'authentification Microsoft OAuth, la génération de documents PDF, la gestion des étudiants et les fonctionnalités d'administration.

Stack technique

Composant Technologie
Framework Django + Django REST Framework
Sérialisation djangorestframework-camel-case (snake_case → camelCase)
Authentification Microsoft Azure AD (OAuth 2.0) + JWT (HttpOnly cookie)
Génération PDF Moteur de templates PDF interne
Base de données PostgreSQL (ou SQLite en dev)
Conteneur Docker

Sérialisation camelCase

Le backend utilise djangorestframework-camel-case : il accepte les requêtes en snake_case et retourne les réponses en camelCase. Le frontend doit gérer les deux formats dans certains cas (voir normalizeStatusData() côté frontend).

Routes API principales

Authentification

Méthode Route Description
POST /auth/sign_in Login OAuth (code + session_state)
POST /auth/logout Déconnexion
GET /auth/me Informations utilisateur + droits
GET /auth/student/me Informations étudiant
GET /auth/sessions Sessions actives
DELETE /auth/sessions/:id Révoquer une session
DELETE /auth/sessions/others Révoquer toutes les autres sessions

Documents

Méthode Route Description
GET /documents/ Liste des modèles uploadés
POST /documents/ Créer un nouveau modèle
GET /documents/:id Détail d'un modèle
PATCH /documents/:id Modifier un modèle (visibilité, fichier)
GET /documents/document-type-choices Types de documents disponibles
GET /documents/available-document-types Documents autorisés pour un étudiant/classe
GET /documents/available-attributes Attributs de document disponibles
POST /documents/extract-attributes Extraire les attributs d'un fichier
GET /documents/download/student-template Télécharger le template étudiant
GET /documents/download/english-score-template Télécharger le template scores anglais
GET /documents/download/readme Télécharger le README

Documents — Admin

Méthode Route Description
POST /documents/admin/generate-for-student Générer un PDF pour un étudiant
POST /documents/admin/batch-generate Générer en lot (ZIP) pour une classe
GET /documents/admin/student-history/:email/ Historique documentaire d'un étudiant
DELETE /documents/admin/delete-document/:trackingCode/ Supprimer un document
GET /documents/admin/dashboard/stats/ Statistiques du dashboard

Étudiants

Méthode Route Description
GET /students Liste des étudiants (paginée, recherche)
PUT /students/suspend Suspendre/réactiver un étudiant
GET /student/admin/list/ Liste pour migration (filtres section, année)
POST /student/migrate-students/ Migrer des étudiants
GET /student/admin/info-change-requests/ Demandes de modification
POST /student/admin/review-info-change-requests/ Valider/refuser des demandes

Utilisateurs (admins)

Méthode Route Description
GET /users/list Liste des admins
POST /users Créer un admin
PUT /users Modifier un admin
DELETE /users Supprimer un admin

Système (superadmin)

Méthode Route Description
GET /admin/system-status Statut du système (maintenance)
PUT /admin/system-status Activer/désactiver la maintenance
GET /admin/analytics Analytics par période
GET /admin/audit-logs Logs d'audit
GET /admin/backup/export Export base de données
POST /admin/backup/import Import base de données

Annonces

Méthode Route Description
GET /admin/announcements/public Annonces publiques (pas d'auth)
GET /admin/announcements Toutes les annonces (admin)
POST /admin/announcements Créer une annonce
PUT /admin/announcements/:id Modifier une annonce
DELETE /admin/announcements/:id Supprimer une annonce

Query params notables

GET /documents/available-document-types

Param Description Exemple
studentEmail Email de l'étudiant (admin) ?studentEmail=prenom.nom@epitech.eu
classe Code de la classe (batch) ?classe=PGE1
(aucun) Utilise la section de l'utilisateur connecté (étudiant)

Réponse type

{
  "documents": {
    "id": "PGE4",
    "name": "MSc Pro 1",
    "cycle": "Master Pro",
    "allowed_documents": [
      {
        "id": "certificat_scolarite",
        "name": "Certificat de scolarité",
        "description": "Atteste que l'étudiant est inscrit..."
      }
    ],
    "english_documents": []
  }
}

Modèle de données simplifié

Student
├── login (email), nom, prenom, civilite
├── dateNaissance, promo, section, annee
├── accountSuspended (boolean)
└── english_score, credit

Section (classe)
├── id (PGE1, PGE2, PGE3, PGE4, PGE5, PSO, CodingAcademy)
├── name, cycle, common_name
├── credit, credit_to_pass
├── allowed_documents[]
└── english_documents[]

Document (modèle/template)
├── id, name, description
├── file (fichier template)
├── attributes[] (champs dynamiques)
└── is_active (boolean)

Announcement
├── id, title, message
├── type (info, warning, danger)
├── target (students, admins, all)
├── target_class (optionnel)
├── start_date, end_date
└── is_active (boolean)

Cookies d'authentification

Cookie Type Description
auth_token HttpOnly JWT d'authentification — non accessible en JS

Cookie Domain en développement

En dev local, le backend Django doit configurer AUTH_COOKIE_DOMAIN = None pour éviter le blocage du Set-Cookie par le navigateur. En production, utiliser le domaine racine (ex: .epitools.bj).

Maintenance mode

Le backend intercepte toutes les requêtes et retourne une erreur 503 quand le système est en maintenance :

{
  "is_active": false,
  "reason": "Maintenance planifiée",
  "updated_at": "2026-02-22T10:00:00Z"
}

Routes exemptées

Les routes d'authentification (/auth/sign_in, /auth/callback) doivent être exemptées du middleware de maintenance pour permettre aux admins de se connecter et désactiver la maintenance.