docs(tech-debt): FTD-21 documentation complète persistance session

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hermann_Kitio 2026-04-21 03:34:49 +03:00
parent 886ecbb433
commit 95711a7c44

View file

@ -270,21 +270,42 @@ Vient du pattern `c.json(result, result.status)` où `result` contient déjà `s
### FTD-21 — Persistance session simulation
**Priorité :** 🔴 Critique
**Statut :** Ouvert — session backend + frontend requise
**Estimation de session :** ~2 jours (1 jour backend + 1 jour frontend)
**Description :** Si l'utilisateur rafraîchit la page ou fait « retour » pendant une simulation, la production et le sujet sont perdus. L'utilisateur doit pouvoir reprendre exactement où il en était.
**Statut :** Partiellement résolu — `/simulation/ee` en cours
**À faire (backend) :**
- Ajouter colonne `sujet_id` (FK → `sujets.id`) dans `productions` pour persister le sujet associé à chaque simulation
- Autosave du contenu de la textarea toutes les 30 s via `PATCH /simulations/:id/contenu`
- `GET /simulations/:id` retourne aussi le sujet associé (joint sur `sujet_id`)
**Pages concernées par ordre de priorité :**
**À faire (frontend) :**
- `useSimulation` détecte si une simulation est en cours au chargement (via `localStorage` ou URL param)
- Reprend la `production` + `sujet` depuis `GET /simulations/:id`
- La textarea reprend le contenu sauvegardé
🔴 **`/simulation/ee`** (cette session)
- Autosave contenu toutes les 30 s
- Save on `beforeunload`
- Reprise au refresh via `localStorage` + `GET /simulations/:id`
**Condition de résolution :** session dédiée après G1-G5.
🟡 **`/simulation/eo`** (Sprint 4)
- Identique EE + état audio/enregistrement
🟡 **`/examen`** (Sprint 7)
- Autosave critique — timer inarrêtable + 3 tâches
- Crash pendant examen = perte totale
🟢 **`/sujets`** (inclus dans cette session)
- `localStorage simulation_id` suffit
- Pas d'autosave (pas de données saisies)
**Pas nécessaire :** `/dashboard`, `/rapport/:id`, `/historique`, `/progression`
**À faire pour `/simulation/ee` :**
Backend :
- Migration Supabase : ajouter `sujet_id uuid REFERENCES sujets(id)` dans `productions`
- `simulationController` : stocker `sujet_id` à la création
- `GET /simulations/:id` : retourner sujet associé
- Nouveau endpoint `PATCH /simulations/:id/contenu` pour autosave
Frontend :
- `localStorage` : stocker/lire `simulation_id` courant
- `SimulationForm` : autosave debounce 30 s + save on `beforeunload`
- `SimulationFlowProvider` : au chargement, détecter simulation en cours via `localStorage``GET /simulations/:id` → restaurer state
**Condition de résolution :** session dédiée après G1-G5 (EE d'abord, EO + examen ultérieurement).
---