Skip to Content

Niv. 4 — Temps réel & async : réservations vivantes

Objectif : rendre l’application vivante — réservations, paiement Stripe, e-mails async et places en temps réel côté Next.js.

📋 Cahier des charges

Contexte — On passe du catalogue à la réservation : un client réserve un créneau, paie, reçoit une confirmation ; les places se mettent à jour en direct.

Périmètre inclus

  • Entités Slot (créneau, places) et Booking (statut : pending → confirmed → cancelled).
  • Créer une réservation via l’API ; e-mail de confirmation asynchrone (Messenger).
  • Paiement Stripe (Checkout) ; confirmation par webhook signé (idempotent).
  • Mercure : publier les places restantes d’un créneau ; le front Next.js les affiche en direct (EventSource).
  • Scheduler : un rappel la veille (message planifié).

Périmètre exclu — multi-tenant, LTI (Niv. 5).

Livrables — un flux de réservation complet, temps réel et payant (en mode test Stripe).

Critères de réussite

  • Une réservation créée déclenche un e-mail via un worker (pas dans la requête).
  • Le paiement est confirmé par webhook (signature vérifiée), handler idempotent.
  • Les places d’un créneau se mettent à jour en direct sur le front sans rechargement.
  • Un rappel est planifié (Scheduler) et parti par le worker.

🗺️ Endroits à visiter

BesoinChapitre
Messenger & workers12.1, 12.2
Scheduler12.3
Mailer12.4
Mercure & Next.js12.5, 12.6
Stripe12.7

🧭 Étapes suggérées

  1. make:entity Slot + Booking (avec l’enum de statut) et les relations.
  2. composer require symfony/messenger, un message SendBookingConfirmation + handler, routé en async ; lancer un worker.
  3. composer require symfony/mailer (Mailpit en dev) ; e-mail Twig depuis le handler.
  4. composer require stripe/stripe-php : session Checkout + endpoint webhook (vérif signature, dispatch d’un message de confirmation).
  5. composer require symfony/mercure : publier seatsLeft à chaque réservation ; côté Next.js, un hook EventSource.
  6. composer require symfony/scheduler : planifier le rappel de la veille.

🎁 Bonus : ajoutez le Notifier pour envoyer aussi une alerte Slack à l’équipe en cas d’échec de paiement (12.4).


Projet suivant : Niv. 5 — Capstone : BookLab.