Booking Flow
Event booking, confirmation, and check-in process diagrams
Event Booking Flow
This page covers the complete event booking process from discovery to check-in.
Booking Sequence
sequenceDiagram
participant User
participant UI as Booking UI
participant API as TRPC Router
participant Service as Booking Service
participant DB as Database
participant Payment as Payment Service
participant Email as Email Service
User->>UI: Browse events
UI->>API: listEvents(filters)
API->>Service: getAvailableEvents(ctx, filters)
Service->>DB: Query events with availability
DB-->>Service: Events list
Service-->>API: Events
API-->>UI: Display events
User->>UI: Select event & time
UI->>API: checkAvailability(eventId, occurrenceId)
API->>Service: checkSpots(eventId, occurrenceId)
Service->>DB: Get current bookings
DB-->>Service: Booking count
Service-->>API: Available spots
API-->>UI: Show availability
User->>UI: Book event
UI->>API: createBooking(eventId, occurrenceId, data)
API->>Service: createBooking(ctx, input)
Service->>DB: Get event details
DB-->>Service: Event (price, approval required)
alt Requires payment
Service->>Payment: createPaymentIntent(amount)
Payment-->>Service: Payment intent
Service-->>API: {booking, paymentIntent}
API-->>UI: Show payment form
User->>UI: Complete payment
UI->>Payment: Confirm payment
Payment-->>UI: Payment success
UI->>API: confirmBooking(bookingId, paymentId)
API->>Service: confirmBooking(bookingId)
else Free event
Service->>DB: Create booking (PENDING)
end
alt Requires approval
Service->>DB: Update booking (AWAITING_APPROVAL)
Service->>Email: notifyAdminForApproval(booking)
else Auto-confirm
Service->>DB: Update booking (CONFIRMED)
Service->>DB: Decrement available spots
end
Service->>Email: sendBookingConfirmation(booking)
Email->>User: Confirmation email
Service-->>API: Booking result
API-->>UI: Show confirmationWaitlist Flow
flowchart TD
FULL[Event Full] --> JOIN[Join Waitlist]
JOIN --> POSITION[Assign Position]
POSITION --> NOTIFY[Confirm Waitlist Position]
subgraph "When Spot Opens"
CANCEL[Booking Cancelled] --> CHECK[Check Waitlist]
CHECK --> FIRST[Get First in Line]
FIRST --> OFFER[Offer Spot]
OFFER --> RESPONSE{Response in 24h?}
RESPONSE -->|Accept| BOOK[Create Booking]
RESPONSE -->|Decline| NEXT[Move to Next]
RESPONSE -->|No Response| NEXT
NEXT --> CHECK
end
BOOK --> CONFIRM[Confirm Booking]
CONFIRM --> REMOVE[Remove from Waitlist]
style CONFIRM fill:#e8f5e9Waitlist Sequence
sequenceDiagram
participant User as Waitlisted User
participant System as Booking System
participant DB as Database
participant Email as Email Service
participant User2 as Original Booker
User2->>System: Cancel booking
System->>DB: Update booking (CANCELLED)
System->>DB: Increment available spots
System->>DB: Check waitlist for event
DB-->>System: Waitlist entries
alt Waitlist has entries
System->>DB: Get first waitlist entry
DB-->>System: Waitlisted user
System->>Email: Send spot available notification
Email->>User: "Spot available - claim now"
System->>DB: Set claim deadline (24h)
alt User claims spot
User->>System: Claim spot
System->>DB: Create booking
System->>DB: Remove from waitlist
System->>Email: Send confirmation
else Deadline passes
System->>System: Move to next in waitlist
end
endApproval Workflow
flowchart TD
BOOKING[Booking Created] --> CHECK{Requires Approval?}
CHECK -->|No| AUTO[Auto-Confirm]
CHECK -->|Yes| PENDING[Set Pending Approval]
PENDING --> NOTIFY_ADMIN[Notify Admin]
NOTIFY_ADMIN --> REVIEW[Admin Reviews]
REVIEW --> DECISION{Decision}
DECISION -->|Approve| APPROVE[Approve Booking]
DECISION -->|Reject| REJECT[Reject Booking]
DECISION -->|Request Info| REQUEST[Request Information]
REQUEST --> USER_RESPOND[User Responds]
USER_RESPOND --> REVIEW
APPROVE --> CONFIRM[Confirm Booking]
REJECT --> REFUND{Payment Made?}
REFUND -->|Yes| PROCESS_REFUND[Process Refund]
REFUND -->|No| NOTIFY_REJECT[Notify User]
PROCESS_REFUND --> NOTIFY_REJECT
AUTO --> CONFIRM
style CONFIRM fill:#e8f5e9
style NOTIFY_REJECT fill:#ffebeeCheck-In Process
flowchart TD
EVENT_DAY[Event Day] --> ARRIVE[Attendee Arrives]
ARRIVE --> METHOD{Check-In Method}
METHOD --> SCAN[QR Code Scan]
METHOD --> MANUAL[Manual Search]
METHOD --> SELF[Self Check-In Kiosk]
SCAN --> VALIDATE[Validate Booking]
MANUAL --> SEARCH[Search by Name/Email]
SEARCH --> SELECT[Select Booking]
SELECT --> VALIDATE
SELF --> CODE[Enter Code]
CODE --> VALIDATE
VALIDATE --> VALID{Valid Booking?}
VALID -->|Yes| CHECKIN[Mark Checked In]
VALID -->|No| ERROR[Show Error]
CHECKIN --> UPDATE[Update Attendance]
UPDATE --> CONFIRM_CHECKIN[Confirm Check-In]
ERROR --> OPTIONS{Options}
OPTIONS --> WALKIN[Walk-In Registration]
OPTIONS --> CONTACT[Contact Organizer]
style CHECKIN fill:#e8f5e9Check-In Sequence
sequenceDiagram
participant Staff
participant App as Check-In App
participant API as TRPC Router
participant Service as Booking Service
participant DB as Database
Staff->>App: Scan QR code
App->>API: validateCheckin(bookingCode)
API->>Service: validateAndCheckin(code)
Service->>DB: Find booking by code
DB-->>Service: Booking data
Service->>Service: Validate booking
Note over Service: Check: status, event date, not already checked in
alt Valid
Service->>DB: Update booking (checkedIn = true)
Service->>DB: Set checkedInAt timestamp
Service-->>API: {success: true, attendee: data}
API-->>App: Show success
else Invalid
Service-->>API: {success: false, reason: "..."}
API-->>App: Show error
end
App-->>Staff: Display resultCancellation Policy
flowchart TD
CANCEL_REQUEST[Cancellation Request] --> POLICY[Check Cancellation Policy]
POLICY --> WINDOW{Within Window?}
WINDOW -->|Full Refund| FULL[Process Full Refund]
WINDOW -->|Partial Refund| PARTIAL[Process Partial Refund]
WINDOW -->|No Refund| NONE[No Refund]
FULL --> PROCESS[Process Cancellation]
PARTIAL --> PROCESS
NONE --> CONFIRM{Confirm Cancel?}
CONFIRM -->|Yes| PROCESS
CONFIRM -->|No| KEEP[Keep Booking]
PROCESS --> RELEASE[Release Spot]
RELEASE --> WAITLIST[Check Waitlist]
PROCESS --> NOTIFY[Notify User]
subgraph "Policy Example"
P1["> 48h: Full refund"]
P2["24-48h: 50% refund"]
P3["< 24h: No refund"]
end
style FULL fill:#e8f5e9
style NONE fill:#ffebeeBooking Confirmation Email
flowchart TD
CONFIRM[Booking Confirmed] --> GENERATE[Generate Confirmation]
GENERATE --> CONTENT[Email Content]
CONTENT --> DETAILS[Event Details]
CONTENT --> QR[QR Code for Check-In]
CONTENT --> CALENDAR[Calendar File (.ics)]
CONTENT --> DIRECTIONS[Location/Directions]
DETAILS --> SEND[Send Email]
QR --> SEND
CALENDAR --> SEND
DIRECTIONS --> SEND
SEND --> REMINDERS[Schedule Reminders]
REMINDERS --> R1[24h Before]
REMINDERS --> R2[1h Before]