refactor(server): structure the game engine per round (#11) #36

Merged
Reliodas merged 1 commit from refactor/11-round-engine into develop 2026-06-24 07:58:10 +00:00
Owner

Closes #11.

Le switch central de game:action accumulait des branches par manche qui grossiraient encore avec la finale.

Changements

  • Interface RoundEngine (handleAction + cleanup), un moteur par manche enregistré par numéro ; game:action résout le moteur de la manche courante et délègue — plus de switch central.
  • Chaque manche possède la transition qui la quitte (manche 1 : coupure puis démarrage manche 2 ; manche 2 : sélection des finalistes).
  • Constantes d'actions et de statuts centralisées dans constants.ts, alignées sur les types @shared via satisfies, réutilisées par la validation.
  • Nettoyage du chronomètre extrait (game.timer.ts) ; closeRoom libère la manche active via cleanupRound.

Ajouter la finale = enregistrer un troisième moteur.

Tests

  • Nouveau round.engine.test.ts (dispatch, transitions, cleanup).
  • node:test 166/1 skip, Jest 13 ; couverture au-dessus des planchers (round.engine 100 %, constants 100 %) ; typecheck + build OK. Refactor sans changement de comportement.

Critères d'acceptation

  • Interface commune start/action/état/cleanup par manche
  • Isoler états internes et transitions par manche
  • Centraliser les constantes de statuts et d'actions
  • Préserver l'autorité serveur et la personnalisation par rôle
  • Préparer la finale sans agrandir le switch principal

🤖 Generated with Claude Code

Closes #11. Le `switch` central de `game:action` accumulait des branches par manche qui grossiraient encore avec la finale. ## Changements - Interface `RoundEngine` (`handleAction` + `cleanup`), un moteur par manche enregistré par numéro ; `game:action` résout le moteur de la manche courante et délègue — plus de `switch` central. - Chaque manche possède la transition qui la quitte (manche 1 : coupure puis démarrage manche 2 ; manche 2 : sélection des finalistes). - Constantes d'actions et de statuts centralisées dans `constants.ts`, alignées sur les types `@shared` via `satisfies`, réutilisées par la validation. - Nettoyage du chronomètre extrait (`game.timer.ts`) ; `closeRoom` libère la manche active via `cleanupRound`. Ajouter la finale = enregistrer un troisième moteur. ## Tests - Nouveau `round.engine.test.ts` (dispatch, transitions, cleanup). - node:test 166/1 skip, Jest 13 ; couverture au-dessus des planchers (round.engine 100 %, constants 100 %) ; typecheck + build OK. Refactor sans changement de comportement. ## Critères d'acceptation - [x] Interface commune start/action/état/cleanup par manche - [x] Isoler états internes et transitions par manche - [x] Centraliser les constantes de statuts et d'actions - [x] Préserver l'autorité serveur et la personnalisation par rôle - [x] Préparer la finale sans agrandir le switch principal 🤖 Generated with [Claude Code](https://claude.com/claude-code)
refactor(server): structure the game engine per round
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
d040b55882
The central game:action switch accumulated per-round branches that would grow
again with the final round (#11).

- Add a RoundEngine interface (handleAction + cleanup) with one engine per round
  registered by number; game:action resolves the current round's engine and
  delegates, with no central switch.
- Each round owns the transition that leaves it (round 1 applies the
  qualification cut then starts round 2; round 2 selects the finalists).
- Centralise action and status names in constants.ts, aligned with the @shared
  types via `satisfies`, and reuse them in validation.
- Extract the timer cleanup (game.timer.ts); closeRoom now releases the active
  round through cleanupRound.

Adding the final round becomes registering a third engine. Add engine unit
tests; the full suite is unchanged behaviourally. Update Implémentation.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reliodas merged commit 67b2f2275e into develop 2026-06-24 07:58:10 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: jeux/le-grand-concours#36
No description provided.