feat(production): types SimulationState + API autosave/updateSujet (FTD-21)
This commit is contained in:
parent
95711a7c44
commit
d395a04193
2 changed files with 88 additions and 2 deletions
|
|
@ -9,7 +9,13 @@
|
|||
*/
|
||||
|
||||
import { apiFetch } from '@/shared/lib/api-client'
|
||||
import type { CreateSimulationPayload, Production, SujetData, Tache } from './types'
|
||||
import type {
|
||||
CreateSimulationPayload,
|
||||
Production,
|
||||
SimulationState,
|
||||
SujetData,
|
||||
Tache,
|
||||
} from './types'
|
||||
|
||||
/** Crée une nouvelle simulation. Endpoint : `POST /simulations` (HTTP 201). */
|
||||
export function createSimulation(payload: CreateSimulationPayload): Promise<Production> {
|
||||
|
|
@ -21,6 +27,43 @@ export function getSimulation(id: string): Promise<Production> {
|
|||
return apiFetch<Production>(`/simulations/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* FTD-21 — récupère l'état complet d'une simulation (contenu + sujet + rapport).
|
||||
* Utilisé par `SimulationFlowProvider` pour restaurer une session depuis
|
||||
* `localStorage.expria_simulation_id` au mount.
|
||||
*
|
||||
* Si `rapport === null` → simulation en cours, restaurer `/simulation/ee`.
|
||||
* Sinon → simulation terminée, rediriger vers `/rapport/:id`.
|
||||
*/
|
||||
export function getSimulationState(id: string): Promise<SimulationState> {
|
||||
return apiFetch<SimulationState>(`/simulations/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* FTD-21 — autosave du contenu (debounce 30 s + beforeunload).
|
||||
* Endpoint : `PATCH /simulations/:id/contenu`.
|
||||
* Ne retourne rien : le client conserve déjà le texte localement.
|
||||
*/
|
||||
export async function autosaveContenu(id: string, contenu: string): Promise<void> {
|
||||
await apiFetch<{ ok: true }>(`/simulations/${id}/contenu`, {
|
||||
method: 'PATCH',
|
||||
body: { contenu },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* FTD-21 — persiste un changement de sujet côté backend.
|
||||
* Endpoint : `PATCH /simulations/:id/sujet`.
|
||||
* Appelé depuis `SimulationFlowProvider.changeSubject` quand l'utilisateur
|
||||
* choisit un autre sujet via `/sujets`.
|
||||
*/
|
||||
export async function updateSujet(id: string, sujetId: string): Promise<void> {
|
||||
await apiFetch<{ sujet: SujetData }>(`/simulations/${id}/sujet`, {
|
||||
method: 'PATCH',
|
||||
body: { sujet_id: sujetId },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Mappe une Tache vers les paramètres de la route `GET /sujets`.
|
||||
* Retourne `null` pour les tâches sans catalogue de sujets côté base
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue