Files
eventspace/backend/app/models/event.py
Felipe Cardoso 5cd38c82e0 Refactor relationships in Event and User models
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.
2025-02-28 12:30:25 +01:00

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})>"