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
|
||||
**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).
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue