erDiagram User ||--o{ Event : "creates/manages" User { uuid id PK string email string password_hash string first_name string last_name string phone_number datetime created_at datetime updated_at boolean is_active boolean is_superuser json preferences } Event ||--o{ Guest : "invites" Event ||--o{ GiftItem : "contains" Event ||--o{ EventMedia : "has" Event ||--o{ EventUpdate : "has" Event ||--o{ EventTheme : "uses" Event { uuid id PK string title string slug UK string description string location_name string location_address string location_url datetime event_date time event_start_time time event_end_time string timezone datetime rsvp_deadline boolean is_public string access_code uuid created_by FK uuid theme_id FK json custom_theme_settings json additional_info datetime created_at datetime updated_at boolean is_active boolean rsvp_enabled boolean gift_registry_enabled boolean updates_enabled integer max_guests_per_invitation string contact_email string contact_phone } Guest ||--o{ RSVP : "submits" Guest { uuid id PK uuid event_id FK string name string email string phone string invitation_code UK datetime invited_at boolean email_sent datetime email_sent_at integer reminder_count datetime last_reminder_sent string relationship string notes json address json custom_fields datetime created_at datetime updated_at } RSVP { uuid id PK uuid guest_id FK uuid event_id FK boolean attending integer number_of_adults integer number_of_children string dietary_restrictions string message string additional_guests_names datetime responded_at string ip_address string user_agent json custom_responses datetime created_at datetime updated_at } GiftItem ||--o{ GiftReservation : "has" GiftItem { uuid id PK uuid event_id FK string name string description string image_url decimal price string currency string purchase_url integer priority boolean is_group_gift decimal amount_contributed integer quantity_requested integer quantity_remaining boolean is_custom_amount decimal min_custom_amount boolean is_visible json category_tags json additional_details datetime created_at datetime updated_at } GiftReservation { uuid id PK uuid gift_item_id FK uuid guest_id FK "nullable" string reserver_name string reserver_email string reserver_phone integer quantity decimal amount boolean is_anonymous datetime reserved_at string reservation_code string message boolean is_purchased datetime purchased_at datetime created_at datetime updated_at } EventMedia { uuid id PK uuid event_id FK string media_type string title string description string file_path string url string thumbnail_url integer display_order boolean is_featured boolean is_public string alt_text string credit datetime upload_date json metadata datetime created_at datetime updated_at } EventTheme { uuid id PK string name string description string preview_image_url json color_palette json fonts json animations json layout_options json component_styles boolean is_active datetime created_at datetime updated_at } EventUpdate { uuid id PK uuid event_id FK string title string content boolean is_important boolean is_pinned boolean send_notification boolean notification_sent datetime notification_sent_at datetime publish_date datetime created_at datetime updated_at } EmailTemplate { uuid id PK string name string subject string html_content string text_content string description string template_type json variables boolean is_active datetime created_at datetime updated_at } Setting { string key PK string value string description string category datetime created_at datetime updated_at } NotificationLog { uuid id PK string notification_type uuid event_id FK uuid guest_id FK "nullable" string recipient string subject string content_preview boolean is_sent string error_message datetime sent_at datetime created_at } EventActivity { uuid id PK uuid event_id FK uuid user_id FK "nullable" uuid guest_id FK "nullable" string activity_type string description json context_data string ip_address datetime created_at } EventTheme ||--o{ Event : "applied to" Guest ||--o{ GiftReservation : "makes" Event ||--o{ RSVP : "receives" Event ||--o{ EventActivity : "logs" Event ||--o{ NotificationLog : "generates"