23 lines
1.8 KiB
Markdown
23 lines
1.8 KiB
Markdown
# Issue #287 — Canonical round-flow backend artifact
|
|
|
|
## State-transition matrix
|
|
|
|
| Trigger | From | To | Server-owned effect |
|
|
|---|---|---|---|
|
|
| `POST /lobby/sessions/{code}/rounds/start` | `lobby` | `lie` | Opretter `RoundConfig`, vælger/låser konkret `RoundQuestion`, eksponerer prompt + lie-deadline i samme svar |
|
|
| Sidste gyldige `submit_lie` for aktivt spørgsmål | `lie` | `guess` | Dedupe/shuffle `correct_answer + lies`, persisterer `mixed_answers`, broadcaster `phase.guess_started` |
|
|
| Sidste gyldige `submit_guess` for aktivt spørgsmål | `guess` | `reveal` | Beregner score deterministisk, persisterer `ScoreEvent` + opdaterede `Player.score`, returnerer canonical reveal payload |
|
|
| Første canonical state-read efter resolved reveal (`session_detail`, og idempotent `GET /scoreboard` hvis state allerede er resolved) | `reveal` | `scoreboard` | Promoverer scoreboard som state, broadcaster `phase.scoreboard`, eksponerer leaderboard + readiness |
|
|
| `POST /lobby/sessions/{code}/rounds/next` | `scoreboard` | `lie` | Increment round counter, kopierer seneste `RoundConfig`, vælger/låser næste spørgsmål i samme kategori og broadcaster `phase.lie_started` |
|
|
| `POST /lobby/sessions/{code}/finish` | `scoreboard` | `finished` | Fryser slutresultat og returnerer final leaderboard |
|
|
|
|
## Flow-log (happy path)
|
|
|
|
1. Host starter runde med kategori.
|
|
2. Server vælger straks spørgsmål og går i `lie`.
|
|
3. Spillere sender løgne; sidste submission auto-advancer til `guess`.
|
|
4. Spillere sender gæt; sidste submission auto-advancer til `reveal` og scorer runden.
|
|
5. Næste canonical state-read promoverer resolved reveal til `scoreboard`; state findes uden separat debug-knap.
|
|
6. Host kan nu kun vælge `next round` eller `finish game`.
|
|
7. `next round` starter næste runde direkte i `lie` med nyt konkret spørgsmål; ingen mellem-hop tilbage til `lobby`.
|