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:
parent
886ecbb433
commit
95711a7c44
1 changed files with 33 additions and 12 deletions
|
|
@ -270,21 +270,42 @@ Vient du pattern `c.json(result, result.status)` où `result` contient déjà `s
|
||||||
|
|
||||||
### FTD-21 — Persistance session simulation
|
### FTD-21 — Persistance session simulation
|
||||||
**Priorité :** 🔴 Critique
|
**Priorité :** 🔴 Critique
|
||||||
**Statut :** Ouvert — session backend + frontend requise
|
**Statut :** Partiellement résolu — `/simulation/ee` en cours
|
||||||
**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.
|
|
||||||
|
|
||||||
**À faire (backend) :**
|
**Pages concernées par ordre de priorité :**
|
||||||
- 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`)
|
|
||||||
|
|
||||||
**À faire (frontend) :**
|
🔴 **`/simulation/ee`** (cette session)
|
||||||
- `useSimulation` détecte si une simulation est en cours au chargement (via `localStorage` ou URL param)
|
- Autosave contenu toutes les 30 s
|
||||||
- Reprend la `production` + `sujet` depuis `GET /simulations/:id`
|
- Save on `beforeunload`
|
||||||
- La textarea reprend le contenu sauvegardé
|
- 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).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue