erDiagram
Bookings {
BookingId booking_id PK
EventId event_id FK
string full_name
string email
datetime booking_date
number duration "Minutes"
enum status
}
Availability {
AvailabilityId availability_id PK
string name
string time_zone
}
AvailabilitySlots {
AvailabilitySlotId availability_slot_id PK
AvailabilityId availability_id FK
number weekday "0 for Monday, 6 for Sunday"
number start_time
number end_time
}
Overrides {
OverrideId override_id PK
AvailabilityId availability_id FK
bool all_day
}
OverrideSlots {
OverrideSlotId override_slot_id
OverrideId override_id
number weekday "0 for Monday, 6 for Sunday"
number start_time
number end_time
}
Events {
EventId event_id PK
AvailabilityId availability_id FK
bool enabled "Is visible in UI"
string title
string description "Markdown"
string slug "Public URL portion"
number min_duration "Minutes"
number max_duration "Minutes"
number increment "Minutes"
number daily_frequency_limit "Times"
number weekly_frequency_limit "Times"
number monthly_frequency_limit "Times"
number yearly_frequency_limit "Times"
number daily_duration_limit "Minutes"
number weekly_duration_limit "Minutes"
number monthly_duration_limit "Minutes"
number yearly_duration_limit "Minutes"
number days_into_future_limit
number minimum_notice_limit
enum minimum_notice_limit_unit "days/hours/minutes"
number before_event_buffer "Minutes"
number after_event_buffer "Minutes"
number fixed_fee "Dollars"
number rate "Dollars per minute"
}
IntakeQuestions {
IntakeQuestionId intake_question_id PK
EventId event_id FK
number ordinal
bool required
enum kind
string identifier
string label
string description "Markdown"
string placeholder
json default_value
bool locked
}
IntakeQuestionOptions {
IntakeQuestionOptionId intake_question_option_id PK
IntakeQuestionId intake_question_id FK
string identifier
string label
}
IntakeQuestionAnswers {
IntakeQuestionAnswerId intake_question_answer_id PK
BookingId booking_id FK
number ordinal
enum kind
string identifier
string label
string description
json answer
}
Availability ||--|{ AvailabilitySlots : has
Availability ||--o{ Overrides : has
Events ||--|| Availability : "scheduled during"
Bookings }o--|| Events : has
Bookings ||--o{ IntakeQuestionAnswers : has
Overrides ||--o{ OverrideSlots : has
Events ||--|{ IntakeQuestions : has
IntakeQuestions ||--o{ IntakeQuestionOptions : has
#bookingservice
After the cal.com fiasco I think I'll try to roll out something simple, without too many dependencies, that can just run quickly...
Some Notes on the architecture, which I'll be updating.
#bookingservice