Reservation Management — House of Legends
Documented: 2026-05-11 Doc Status: Excellent | ✓ All 6 checks passedOverview
Staff manage reservations via the admin dashboard — view list, filter, and take actions (cancel, refund, check-in).Reservations Table
Reservation List (/dashboard/reservations)
Table Columns
| Column | Source |
|---|---|
| ID | reservation._id (short) |
| Guest | ${firstName} ${lastName} |
customerEmail | |
| Phone | customerPhone |
| Event | experienceEvents lookup |
| Type | ticketType |
| Qty | quantity |
| Total | totalAmount formatted |
| Status | paymentStatus badge |
| Date | createdAt formatted |
Filters
- Status: PENDING, PAID, CANCELLED, REFUNDED
- Date range: Created between dates
- Event: Specific experience or all
- Search: Name, email, phone
Status Badges
| Status | Badge Color | Meaning |
|---|---|---|
| PENDING | Yellow | Awaiting payment |
| PAID | Green | Payment confirmed |
| REFUND_PENDING | Orange | Refund requested |
| REFUNDED | Gray | Refund completed |
| CANCELLED | Red | Cancelled |
| FAILED | Red | Payment failed |
Reservation Detail (Drawer)
Opens on row click:Guest Info
- Full name, email, phone
- Booking created timestamp
Event Info
- Experience name
- Date + time
- Venue
Ticket Info
- Ticket type (Dinner Theatre / Show Only)
- Quantity
- Unit price
Add-ons
- List of add-ons with quantities
Pricing Summary
- Subtotal
- Day-of-week surcharge
- Small party surcharge
- Total
Payment Info
- Gateway (OnePay)
- Order ID
- Transaction ID
- VA Number (if bank transfer)
- QR code preview
Status History
- Created
- Payment confirmed (if PAID)
- Checked in (if applicable)
Actions
| Action | Mutation | Condition |
|---|---|---|
| Cancel | reservations.cancelReservation | PENDING or PAID |
| Check-in | checkIns.create | PAID not yet checked in |
| Resend confirmation | notifications.sendConfirmation | Any status |
Cancel Flow (with optional refund)
ThecancelReservation mutation handles both cancellation and refund in a single flow:
- Staff clicks “Cancel”
- Confirmation dialog
reservations.cancelReservationcalled- If PENDING: Status — CANCELLED, seats released
- If PAID with OnePay order: Status — REFUND_PENDING, OnePay refund API called
- Refund confirmation comes via webhook → Status — REFUNDED
- Notification sent to guest
Check-in
Located at/dashboard/checkin:
- QR scanner (camera)
- Manual lookup by reservation ID
- Shows guest details + party size
- “Check In” button
- Creates
checkInsrecord - Updates
reservation.checkedInAt
Backend Functions
| Function | Purpose |
|---|---|
reservations.list | All reservations with filters |
reservations.getById | Single reservation detail |
reservations.cancelReservation | Cancel reservation + trigger refund if paid |
checkIns.create | Record check-in |
notifications.sendConfirmation | Resend confirmation email/WhatsApp |