La vie d'une réservation

Exercice 3 sur 6 du chapitre 10 · 280 XP · 5 objectifs vérifiés par des tests

Notions abordées : WorkflowMachine à étatsPlaces et transitionsmarking_storeinitial_marking

Une réservation a une vie : demandée par un voyageur, confirmée par la taverne, puis honorée le soir venu. Sauf si quelqu'un l'annule entre-temps. Aujourd'hui, rien ne l'empêche d'être honorée sans avoir été confirmée, ou annulée après le repas.

Pipin a ajouté un statut aux réservations. Plutôt que de semer des if ($statut === …) partout, la taverne va décrire ce cycle de vie une fois, et laisser Symfony le faire respecter.

Le composant Workflow

Un workflow décrit des places (les états possibles) et des transitions (les passages permis de l'une à l'autre). Quand un objet ne peut être qu'à une seule place à la fois, c'est une machine à états (state_machine). Le workflow sait :

Votre mission

  1. Dans config/packages/workflow.yaml, décrivez la machine à états reservation :

    Transition depuis vers
    confirmer demandee confirmee
    honorer confirmee honoree
    annuler demandee ou confirmee annulee

    Une nouvelle réservation commence à demandee, et la place se range dans la propriété statut.

  2. Les réservations du site et celles des guildes (l'API) sont enregistrées demandee.

Dans la console, workflow:dump reservation --dump-format=mermaid décrit votre machine sous forme de diagramme.