Files
eventspace/backend/app/models/event.py
Felipe Cardoso 9d71fc7fcd Add models for EmailTemplate, ActivityLog, and NotificationLog
Introduced new database models to handle email templates, activity logs, and notification logs, including relevant enums and utilities. Updated ER diagram to reflect new relationships and attributes, enhancing event tracking and notification management capabilities.
2025-02-27 19:54:26 +01:00

62 lines
2.3 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 remain the same...
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")
gift_items = relationship("GiftItem", back_populates="event")
media = relationship("EventMedia", back_populates="event")
updates = relationship("EventUpdate", back_populates="event")
rsvps = relationship("RSVP", back_populates="event")
__table_args__ = (
UniqueConstraint('slug', name='uq_event_slug'),
)
def __repr__(self):
return f"<Event {self.title} ({self.event_date})>"