Clarify and fix relationship definitions by specifying foreign keys explicitly in User model. Add new relationships for gift categories and email templates to the Event model, and comment out unused EventUpdate relationship. These changes ensure better structure and future maintainability.
64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
from sqlalchemy import (
|
|
Column, String, DateTime, Time, Boolean, Integer, ForeignKey, JSON,
|
|
UniqueConstraint
|
|
)
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from .base import Base, TimestampMixin, UUIDMixin
|
|
|
|
|
|
class Event(Base, UUIDMixin, TimestampMixin):
|
|
__tablename__ = 'events'
|
|
|
|
# Basic Information
|
|
title = Column(String, nullable=False)
|
|
slug = Column(String, nullable=False)
|
|
description = Column(String)
|
|
|
|
# Location Details
|
|
location_name = Column(String)
|
|
location_address = Column(String)
|
|
location_url = Column(String)
|
|
|
|
# Timing - now timezone-aware
|
|
event_date = Column(DateTime(timezone=True), nullable=False)
|
|
event_start_time = Column(Time)
|
|
event_end_time = Column(Time)
|
|
timezone = Column(String, nullable=False)
|
|
rsvp_deadline = Column(DateTime(timezone=True))
|
|
|
|
# Rest of the fields remain the same...
|
|
is_public = Column(Boolean, default=False, nullable=False)
|
|
access_code = Column(String)
|
|
created_by = Column(UUID(as_uuid=True), ForeignKey('users.id'), nullable=False)
|
|
theme_id = Column(UUID(as_uuid=True), ForeignKey('event_themes.id'))
|
|
custom_theme_settings = Column(JSON)
|
|
additional_info = Column(JSON)
|
|
is_active = Column(Boolean, default=True, nullable=False)
|
|
rsvp_enabled = Column(Boolean, default=True, nullable=False)
|
|
gift_registry_enabled = Column(Boolean, default=True, nullable=False)
|
|
updates_enabled = Column(Boolean, default=True, nullable=False)
|
|
max_guests_per_invitation = Column(Integer)
|
|
contact_email = Column(String)
|
|
contact_phone = Column(String)
|
|
|
|
# Relationships
|
|
creator = relationship("User", back_populates="created_events", foreign_keys=[created_by])
|
|
theme = relationship("EventTheme", back_populates="events")
|
|
managers = relationship("EventManager", back_populates="event")
|
|
guests = relationship("Guest", back_populates="event")
|
|
gifts = relationship("GiftItem", back_populates="event")
|
|
gift_categories = relationship("GiftCategory", back_populates="event")
|
|
media = relationship("EventMedia", back_populates="event")
|
|
# updates = relationship("EventUpdate", back_populates="event") # Keep commented out
|
|
rsvps = relationship("RSVP", back_populates="event")
|
|
email_templates = relationship("EmailTemplate", back_populates="event") # Add this line
|
|
|
|
__table_args__ = (
|
|
UniqueConstraint('slug', name='uq_event_slug'),
|
|
)
|
|
|
|
def __repr__(self):
|
|
return f"<Event {self.title} ({self.event_date})>"
|