Browsing shows is a cached, search-driven read path. The hard part is the seat map: when you pick seats they are held for a few minutes with a short-lived lock, so nobody else can take them while you pay. Payment confirms the booking in one database transaction; if you walk away, the hold expires and the seats return. For blockbuster openings a virtual waiting room meters people into the booking flow.
Functional requirements
- Browse movies and events by city, date, language and venue
- See a live seat map and pick specific seats
- Hold seats while paying; release them if payment doesn't finish
- Pay and receive an e-ticket (QR code)
- Cancel and refund within the venue's policy
Non-functional requirements
- Never sell the same seat twice
- Handle premiere spikes (hundreds of thousands of concurrent users)
- Seat maps reflect holds within seconds
- Payments are exactly-once
Extensions
- Live seat-map updates over WebSockets.
- Dynamic pricing for high-demand shows.
- Food and beverage add-ons in the same order.