Updated `metadata` field names to `media_metadata` and `notification_metadata` in the eventspace ER schema. This improves clarity by providing more context-specific naming for better understanding and maintainability.
262 lines
6.9 KiB
Plaintext
262 lines
6.9 KiB
Plaintext
erDiagram
|
|
User ||--o{ Event : "creates"
|
|
User ||--o{ EventManager : "is assigned as"
|
|
User ||--o{ Guest : "can be linked to"
|
|
User ||--o{ ActivityLog : "generates"
|
|
User ||--o{ EmailTemplate : "creates"
|
|
User {
|
|
uuid id PK
|
|
string email UK
|
|
string password_hash
|
|
string first_name
|
|
string last_name
|
|
string phone_number
|
|
boolean is_active
|
|
boolean is_superuser
|
|
json preferences
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
EventManager }o--|| Event : "manages"
|
|
EventManager {
|
|
uuid id PK
|
|
uuid user_id FK
|
|
uuid event_id FK
|
|
uuid assigned_by FK
|
|
enum role "OWNER/ADMIN/MODERATOR/VIEWER"
|
|
boolean can_edit
|
|
boolean can_invite
|
|
boolean can_manage_gifts
|
|
boolean can_send_updates
|
|
boolean can_view_analytics
|
|
datetime assigned_at
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
Event ||--o{ Guest : "invites"
|
|
Event ||--o{ GiftItem : "contains"
|
|
Event ||--o{ EventMedia : "has"
|
|
Event ||--o{ GiftCategory : "has"
|
|
Event ||--o{ EmailTemplate : "has"
|
|
Event ||--o{ NotificationLog : "generates"
|
|
Event ||--o{ ActivityLog : "tracks"
|
|
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
|
|
boolean is_active
|
|
boolean rsvp_enabled
|
|
boolean gift_registry_enabled
|
|
boolean updates_enabled
|
|
integer max_guests_per_invitation
|
|
string contact_email
|
|
string contact_phone
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
Guest ||--o{ RSVP : "submits"
|
|
Guest ||--o{ GiftPurchase : "makes"
|
|
Guest ||--o{ NotificationLog : "receives"
|
|
Guest ||--o{ ActivityLog : "generates"
|
|
Guest {
|
|
uuid id PK
|
|
uuid event_id FK
|
|
uuid invited_by FK
|
|
uuid user_id FK "nullable"
|
|
string full_name
|
|
string email
|
|
string phone
|
|
string invitation_code UK
|
|
enum status "INVITED/PENDING/CONFIRMED/DECLINED/WAITLISTED/CANCELLED"
|
|
integer max_additional_guests
|
|
integer actual_additional_guests
|
|
datetime invitation_sent_at
|
|
datetime last_reminded_at
|
|
datetime response_date
|
|
string dietary_restrictions
|
|
string notes
|
|
json custom_fields
|
|
boolean is_blocked
|
|
boolean can_bring_guests
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
RSVP {
|
|
uuid id PK
|
|
uuid guest_id FK
|
|
uuid event_id FK
|
|
enum status "ATTENDING/NOT_ATTENDING/MAYBE"
|
|
integer number_of_guests
|
|
string response_message
|
|
string dietary_requirements
|
|
json additional_info
|
|
datetime response_date
|
|
datetime last_updated
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
GiftCategory ||--o{ GiftItem : "groups"
|
|
GiftCategory {
|
|
uuid id PK
|
|
uuid event_id FK
|
|
uuid created_by FK
|
|
string name
|
|
string description
|
|
string icon
|
|
string color
|
|
integer display_order
|
|
boolean is_visible
|
|
json custom_fields
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
GiftItem ||--o{ GiftPurchase : "tracks"
|
|
GiftItem {
|
|
uuid id PK
|
|
uuid event_id FK
|
|
uuid added_by FK
|
|
uuid category_id FK
|
|
string name
|
|
string description
|
|
float price
|
|
string currency
|
|
integer quantity_requested
|
|
integer quantity_received
|
|
enum status "AVAILABLE/RESERVED/PURCHASED/RECEIVED/REMOVED"
|
|
enum priority "LOW/MEDIUM/HIGH/MUST_HAVE"
|
|
string purchase_url
|
|
string store_name
|
|
string brand
|
|
string model
|
|
string image_url
|
|
integer display_order
|
|
boolean is_visible
|
|
string notes
|
|
json custom_fields
|
|
datetime last_status_change
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
GiftPurchase {
|
|
uuid id PK
|
|
uuid gift_id FK
|
|
uuid guest_id FK
|
|
integer quantity
|
|
datetime purchased_at
|
|
float purchase_price
|
|
string purchase_currency
|
|
string notes
|
|
}
|
|
|
|
EventTheme ||--o{ Event : "applied to"
|
|
EventTheme {
|
|
uuid id PK
|
|
string name
|
|
string description
|
|
string preview_image_url
|
|
json color_palette
|
|
json fonts
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
EventMedia {
|
|
uuid id PK
|
|
uuid event_id FK
|
|
uuid uploaded_by FK
|
|
string file_path
|
|
string original_filename
|
|
enum media_type "IMAGE/VIDEO/DOCUMENT"
|
|
string content_type
|
|
integer file_size
|
|
enum purpose "BANNER/GALLERY/ATTACHMENT"
|
|
boolean is_public
|
|
integer display_order
|
|
string title
|
|
string description
|
|
json media_metadata
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
EmailTemplate {
|
|
uuid id PK
|
|
string name
|
|
string description
|
|
enum template_type "INVITATION/REMINDER/CONFIRMATION/UPDATE/THANK_YOU/CUSTOM"
|
|
string subject
|
|
text html_content
|
|
text text_content
|
|
json variables
|
|
uuid event_id FK "nullable"
|
|
uuid created_by FK
|
|
boolean is_active
|
|
boolean is_system
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
NotificationLog {I will
|
|
uuid id PK
|
|
enum notification_type "EMAIL/SMS/PUSH/IN_APP"
|
|
enum status "QUEUED/SENT/DELIVERED/FAILED/OPENED/CLICKED"
|
|
string subject
|
|
string content_preview
|
|
uuid template_id FK
|
|
uuid event_id FK
|
|
uuid guest_id FK "nullable"
|
|
string recipient
|
|
datetime sent_at
|
|
datetime delivered_at
|
|
datetime opened_at
|
|
string error_message
|
|
integer retry_count
|
|
string external_id
|
|
json notification_metadata
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
ActivityLog {
|
|
uuid id PK
|
|
enum activity_type
|
|
text description
|
|
uuid event_id FK "nullable"
|
|
uuid user_id FK "nullable"
|
|
uuid guest_id FK "nullable"
|
|
uuid target_id "generic ID"
|
|
string target_type "type of target"
|
|
string ip_address
|
|
string user_agent
|
|
json data
|
|
datetime created_at
|
|
datetime updated_at
|
|
}
|
|
|
|
EmailTemplate }o--|| NotificationLog : "used for"
|
|
User ||--o{ EventManager : "has roles"
|
|
Event ||--o{ RSVP : "receives"
|