Objectif
Implémenter le support backend complet du mode ARDOISE : nouveau type de question à réponse libre saisie au clavier.
Composants à implémenter
Modèles (internal/game/models.go)
- Nouveau type de partie :
ARDOISE (en plus de QUIZ, MEMOTION)
- Nouveau champ sur
MotionCard : KeyboardType string ("letters" | "numbers")
- Nouveau champ sur
GameState : ArdoiseAnswers map[string]string (teamID → réponse tapée)
Machine d'états (internal/game/engine.go)
- Nouvel état :
ARDOISE_LIVE (question posée, timer actif, saisies en cours)
- Nouvel état :
ARDOISE_REVEAL (révélation : bonne réponse + réponses équipes visibles)
- Transitions :
IDLE → ARDOISE_LIVE → ARDOISE_REVEAL → IDLE
Protocole WebSocket (internal/protocol/messages.go)
- Nouvelle action player→server :
ARDOISE_INPUT — payload { teamID, text string }
- Broadcast server→admin/TV sur chaque input : mise à jour de
ArdoiseAnswers dans le GameState
Handler WebSocket (cmd/server/main.go ou internal/server/)
- Route
/ws/player : traiter ARDOISE_INPUT, valider teamID, stocker la réponse, broadcaster le GameState
Tests
- Tests unitaires engine : transitions d'état ARDOISE
- Tests unitaires protocol : sérialisation
ARDOISE_INPUT
- Tests d'intégration : saisie équipe → mise à jour GameState → broadcast admin
Dépendances
- Aucune dépendance sur les issues frontend
Acceptance criteria
Objectif
Implémenter le support backend complet du mode ARDOISE : nouveau type de question à réponse libre saisie au clavier.
Composants à implémenter
Modèles (
internal/game/models.go)ARDOISE(en plus deQUIZ,MEMOTION)MotionCard:KeyboardType string("letters"|"numbers")GameState:ArdoiseAnswers map[string]string(teamID → réponse tapée)Machine d'états (
internal/game/engine.go)ARDOISE_LIVE(question posée, timer actif, saisies en cours)ARDOISE_REVEAL(révélation : bonne réponse + réponses équipes visibles)IDLE → ARDOISE_LIVE → ARDOISE_REVEAL → IDLEProtocole WebSocket (
internal/protocol/messages.go)ARDOISE_INPUT— payload{ teamID, text string }ArdoiseAnswersdans leGameStateHandler WebSocket (
cmd/server/main.goouinternal/server/)/ws/player: traiterARDOISE_INPUT, validerteamID, stocker la réponse, broadcaster leGameStateTests
ARDOISE_INPUTDépendances
Acceptance criteria
ArdoiseAnswersmis à jour en temps réel sur chaque frappe joueurARDOISE_REVEALdéclenché par l'animateur (action existanteREVEALou nouvelle)