from enum import Enum from sqlalchemy import Column, String, Integer, Boolean, ForeignKey, JSON, Enum as SQLEnum from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from .base import Base, TimestampMixin, UUIDMixin class MediaType(str, Enum): IMAGE = "image" VIDEO = "video" DOCUMENT = "document" class MediaPurpose(str, Enum): BANNER = "banner" GALLERY = "gallery" ATTACHMENT = "attachment" class EventMedia(Base, UUIDMixin, TimestampMixin): __tablename__ = 'event_media' # Foreign Keys event_id = Column(UUID(as_uuid=True), ForeignKey('events.id'), nullable=False) uploaded_by = Column(UUID(as_uuid=True), ForeignKey('users.id'), nullable=False) # File Information file_path = Column(String, nullable=False) original_filename = Column(String, nullable=False) media_type = Column(SQLEnum(MediaType), nullable=False) content_type = Column(String, nullable=False) file_size = Column(Integer, nullable=False) # Organization purpose = Column(SQLEnum(MediaPurpose), nullable=False) is_public = Column(Boolean, default=True, nullable=False) display_order = Column(Integer, default=0) title = Column(String) description = Column(String) # Additional Metadata media_metadata = Column(JSON, default=dict) # Relationships event = relationship("Event", back_populates="media") uploader = relationship("User", foreign_keys=[uploaded_by]) def __repr__(self): return f"" @property def is_image(self): return self.media_type == MediaType.IMAGE @property def is_video(self): return self.media_type == MediaType.VIDEO @property def is_document(self): return self.media_type == MediaType.DOCUMENT @property def url(self): """Generate the URL for the media file""" # This should be implemented based on your storage solution # Example: return f"/media/{self.file_path}" pass