Event Storm — Hotel Booking
Reservation, payment authorisation and front desk for a hotel group, surfacing a search command that changes nothing and an authorisation expiry no command produces.
Make it your own.
title "Hotel booking — reservation to checkout"
context "Reservation"
actor Guest
aggregate Booking
# A pure query written up as a command: the storm's classic first finding.
command "Search availability" by Guest on Booking
readmodel "Rate and availability calendar"
command "Confirm booking" by Guest on Booking
event "Booking confirmed" from "Confirm booking"
external "Channel manager"
hotspot "Do we hold inventory during a 20-minute payment retry?"
policy "When booking confirmed, authorise card" then "Authorise card"
context "Payments"
aggregate "Payment authorisation"
command "Authorise card" by "Payment service" on "Payment authorisation"
event "Card authorised" from "Authorise card"
event "Authorisation expired"
external "Acquirer gateway"
hotspot "Who chases a failed pre-authorisation at 2am?"
policy "When card authorised, allocate room" then "Allocate room"
context "Front desk"
aggregate Stay
actor Receptionist
command "Allocate room" by "Housekeeping system" on Stay
event "Room allocated" from "Allocate room"
command "Check guest in" by Receptionist on Stay
event "Guest checked in" from "Check guest in"
readmodel "Arrivals board"
event "Guest checked out"
hotspot "Late checkout — who authorises the charge?"