Files
eventspace/backend/app/models/event_media.py
Felipe Cardoso c1caea44e8 ```
Rename metadata fields for clarity and fix imports.

Updated metadata-related field names across models to improve clarity and consistency (e.g., `metadata` to `media_metadata` and `notification_metadata`). Fixed an error in `guest_gifts` metadata reference and added a proper imports initialization in `__init__.py` for all models.
```
2025-02-28 08:34:49 +01:00

68 lines
2.0 KiB
Python

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"<EventMedia {self.original_filename} ({self.media_type}) for event={self.event_id}>"
@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