Reservation

canonical term: reservation | reference format: RSV_{YYMMDD}_NNNN This document explains what a Reservation is, what data it captures about a guest’s booking, and how it relates to events, payments, and offers.

What Is a Reservation?

A Reservation is a guest’s booking for a specific event. It captures:
  • Who is coming — name, email, phone
  • When — which event (show + date)
  • How many — guest count
  • What they bought — booking path, offers selected
  • How much — all pricing computed by backend
  • Payment status — paid, pending, refunded
  • Check-in status — arrived, seated, not yet arrived
A reservation is created when a guest completes the booking flow. It lives on after the show — it is the record of what happened.

Reservation vs. Booking Draft

There are two states before a reservation is confirmed:
TermMeaning
bookingDraftThe in-progress reservation while the guest is still in the booking flow. Not yet submitted.
reservationA confirmed booking — guest has submitted and (usually) paid.
The bookingDraft is an ephemeral object in the booking flow. The reservation is a persisted database record that survives after the show.

The Two Booking Paths

Every reservation is on one of two paths:
PathMeaningOffers available in Choose Experience
DINNER_SHOWShow + dinner includedDinner Show Packs
TICKETS_ONLYShow only, no dinnerTicket Only Bundles
The path determines:
  • What appears in Choose Experience (offers)
  • What is included in the base ticket price
  • What the guest sees on the confirmation

What Happens in the Booking Flow

The guest moves through the conditional booking flow:
SectionWhat happensDoc
1Select event — choose show + dateSelect Date
2Guest count — total attending guestsGuest Count
3Experience — select offers (bundles, packs, add-ons)Choose Experience
4Menu review — confirm the active menu PDFMenu Review
5Conditional add-ons — Tickets Only + No Extra BundleAdd-ons
6Guest details and personal requestsGuest Details
7Medical and dietary notesGuest Details
8Payment — redirect to OnePayPayment
9Confirmation — reservation confirmed, payment recordedConfirmation
By confirmation, the bookingDraft becomes a reservation.

What a Reservation Records

Guest Information

The primary guest’s contact details — used for confirmation email, WhatsApp updates, and operational contact.
guestName: "Nguyen Van Minh"
guestEmail: "minh.nguyen@example.com"
guestPhone: "+84 912 345 678"
specialRequests: "Vegetarian options for 2 guests. It's our anniversary."

Booking Details

showEventId: "01ARZ3NDEKTSV4RRFFQ69G5FAV"
guestCount: 4
bookingPath: DINNER_SHOW

Offer Selections

What the guest added in Choose Experience. These are stored as offerSelections on the reservation:
offerSelections:
  - offerId: "01ARZ3NDEKTSV4RRFFQ69G5FAV"
    offerName: "The Celebration Pack"
    quantity: 1

Pricing Summary

All pricing is computed by the backend. The frontend displays it but never recalculates.
priceSummary:
  baseTickets: 4 × 1,390,000 = 5,560,000
  dinnerPack: The Celebration Pack = 960,000
  promoDiscount: -0
  total: 6,520,000

Payment Status

paymentStatus: PAID
paidAt: 2026-06-01T14:32:00Z

Check-in Status

checkInStatus: NOT_CHECKED_IN
# Transitions: NOT_CHECKED_IN → CHECKED_IN → SEATED

The Three Identifiers of a Reservation

IdentifierExamplePurpose
id (ULID)01ARZ3NDEKTSV4RRFFQ69G5FAVMachine identity — joins, API
referenceRSV_260603_0001Internal ops identifier
guestReferenceHOL_260603_0001Guest-facing identifier — shown on confirmation, used for support
The guestReference (e.g. HOL_260603_0001) is what the guest uses to identify their booking — it is shorter and more memorable than the internal reference.

Reservation Status Lifecycle

DRAFT → CONFIRMED → CANCELLED

       PAID ← (after payment)

    REFUNDED ← (if refunded)
A DRAFT reservation is abandoned if the guest leaves mid-flow. A CONFIRMED reservation has been submitted. Once payment is recorded, it becomes PAID.

Key Fields

FieldTypeNotes
idULIDMachine identity
referencestringe.g. RSV_260603_0001
guestReferencestringGuest-facing, e.g. HOL_260603_0001
showEventIdULIDFK to the event
guestNamestringPrimary guest
guestEmailstringContact
guestPhonestringContact
guestCountnumberSeats reserved
bookingPathenumDINNER_SHOW or TICKETS_ONLY — see Pricing Model for the full decision matrix
statusenumDRAFT, CONFIRMED, CANCELLED
paymentStatusenumPENDING, PAID, REFUNDED
checkInStatusenumNOT_CHECKED_IN, CHECKED_IN, SEATED
specialRequestsstringDietary, accessibility, occasion
offerSelectionsarrayOffers chosen in Choose Experience
priceSummaryJSONBackend-computed pricing breakdown

See Also

  • Event — the showEvent this reservation is for
  • Payment — the financial record for this reservation
  • Offer — what was selected in Choose Experience
  • Fulfillment — what the guest will receive
  • Booking Flow Overview — the current conditional journey from event selection to confirmation
  • Choose Experience — where offers are selected
  • Payment — where payment is initiated via OnePay
  • Confirmation — the confirmed booking receipt