Skip to content

[ARDOISE] Backend — protocole WebSocket + machine d'états + modèles #86

@CCoupel

Description

@CCoupel

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

  • ArdoiseAnswers mis à jour en temps réel sur chaque frappe joueur
  • État ARDOISE_REVEAL déclenché par l'animateur (action existante REVEAL ou nouvelle)
  • Attribution des points : utiliser le mécanisme existant d'attribution manuelle (comme MEMOTION)
  • Backward compatibility : QUIZ et MEMOTION non impactés

Metadata

Metadata

Assignees

No one assigned

    Labels

    EN QAIssue en cours de tests QATODOPlanifié, pas encore démarrébackendServeur GobacklogItem du backlog BuzzMasterenhancementNew feature or request

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions