@company-manager/docs

Events Domain

UML diagrams for event booking, availability management, and calendar

Events Domain

The Events domain handles event scheduling, booking management, availability tracking, and instructor management.

Domain Overview

graph TB
    subgraph "Event Management"
        EVENT[Events]
        CATEGORY[Categories]
        INSTRUCTOR[Instructors]
    end

    subgraph "Booking"
        BOOKING[Bookings]
        AVAILABILITY[Availability]
        WAITLIST[Waitlist]
    end

    subgraph "Calendar"
        CALENDAR[Calendar View]
        SLOTS[Time Slots]
        RECURRENCE[Recurring Events]
    end

    subgraph "Customer"
        CONTACT[Contacts]
        HISTORY[Booking History]
        CREDITS[Event Credits]
    end

    EVENT --> CATEGORY
    EVENT --> INSTRUCTOR
    EVENT --> SLOTS

    BOOKING --> EVENT
    BOOKING --> CONTACT
    AVAILABILITY --> SLOTS

    CALENDAR --> EVENT
    RECURRENCE --> EVENT

    CONTACT --> HISTORY
    CONTACT --> CREDITS
    CREDITS --> BOOKING

    style EVENT fill:#e1f5fe
    style BOOKING fill:#fff3e0

Entity Relationship Diagram

erDiagram
    TENANT ||--o{ EVENT : has
    TENANT ||--o{ EVENT_CATEGORY : has
    TENANT ||--o{ INSTRUCTOR : has

    EVENT }o--|| EVENT_CATEGORY : belongs_to
    EVENT }o--o| INSTRUCTOR : led_by
    EVENT ||--o{ EVENT_BOOKING : has
    EVENT ||--o{ EVENT_OCCURRENCE : scheduled_as

    EVENT_BOOKING }o--|| CONTACT : made_by
    EVENT_BOOKING }o--|| EVENT_OCCURRENCE : for
    EVENT_BOOKING ||--o| PAYMENT_TRANSACTION : paid_by

    CALENDAR ||--o{ EVENT : displays
    AVAILABILITY ||--o{ TIME_SLOT : defines

    EVENT {
        string id PK
        string tenantId FK
        string categoryId FK
        string instructorId FK
        string title
        text description
        int capacity
        int duration
        decimal price
        enum status
        json recurrenceRule
        boolean requiresApproval
    }

    EVENT_BOOKING {
        string id PK
        string eventId FK
        string occurrenceId FK
        string contactId FK
        enum status
        int participants
        timestamp bookedAt
        string notes
        boolean checkedIn
        timestamp checkedInAt
    }

    EVENT_OCCURRENCE {
        string id PK
        string eventId FK
        timestamp startTime
        timestamp endTime
        int availableSpots
        enum status
    }

Booking States

stateDiagram-v2
    [*] --> PENDING: Create Booking

    PENDING --> CONFIRMED: Auto-Confirm
    PENDING --> AWAITING_APPROVAL: Requires Approval
    PENDING --> CANCELLED: User Cancels

    AWAITING_APPROVAL --> CONFIRMED: Approved
    AWAITING_APPROVAL --> REJECTED: Rejected

    CONFIRMED --> CHECKED_IN: Check In
    CONFIRMED --> NO_SHOW: No Show
    CONFIRMED --> CANCELLED: Cancel

    CHECKED_IN --> COMPLETED: Event Ends
    NO_SHOW --> COMPLETED: Event Ends

    COMPLETED --> [*]
    CANCELLED --> [*]
    REJECTED --> [*]

    note right of PENDING
        Awaiting payment
        or confirmation
    end note

Key Business Processes

Booking Flow

Event booking and confirmation process. View Booking Details

Availability Management

Time slot and capacity management. View Availability Details

Event Types

TypeDescriptionExample
SingleOne-time eventWorkshop
RecurringRepeating scheduleWeekly class
Multi-daySpans multiple daysConference
Drop-inNo booking requiredOpen gym

Booking Flow Overview

flowchart TD
    BROWSE[Browse Events] --> SELECT[Select Event]
    SELECT --> CHECK{Spots Available?}

    CHECK -->|Yes| BOOK[Create Booking]
    CHECK -->|No| WAITLIST[Join Waitlist]

    BOOK --> APPROVAL{Requires Approval?}
    APPROVAL -->|Yes| WAIT[Await Approval]
    APPROVAL -->|No| PAYMENT{Paid Event?}

    WAIT --> APPROVED{Approved?}
    APPROVED -->|Yes| PAYMENT
    APPROVED -->|No| REJECT[Booking Rejected]

    PAYMENT -->|Yes| PAY[Process Payment]
    PAYMENT -->|No| CONFIRM[Confirm Booking]

    PAY --> SUCCESS{Payment OK?}
    SUCCESS -->|Yes| CONFIRM
    SUCCESS -->|No| FAIL[Payment Failed]

    CONFIRM --> NOTIFY[Send Confirmation]
    NOTIFY --> CALENDAR[Add to Calendar]

    WAITLIST --> SPOT_OPEN[Spot Opens]
    SPOT_OPEN --> NOTIFY_WL[Notify Waitlist]
    NOTIFY_WL --> BOOK

    style CONFIRM fill:#e8f5e9
    style REJECT fill:#ffebee