from sqlalchemy import Column, Integer, String, DateTime, Boolean, BigInteger, ForeignKey, Enum from sqlalchemy.orm import relationship from sqlalchemy.sql import func from enum import Enum as PyEnum from app.db.base import Base class MediaType(PyEnum): IMAGE = "image" VIDEO = "video" AUDIO = "audio" DOCUMENT = "document" OTHER = "other" class Media(Base): __tablename__ = "media" id = Column(Integer, primary_key=True, index=True) message_id = Column(Integer, ForeignKey("messages.id"), nullable=False) uploader_id = Column(Integer, ForeignKey("users.id"), nullable=False) filename = Column(String, nullable=False) original_filename = Column(String, nullable=False) file_path = Column(String, nullable=False) file_size = Column(BigInteger, nullable=False) # Size in bytes mime_type = Column(String, nullable=False) media_type = Column(Enum(MediaType), nullable=False) width = Column(Integer, nullable=True) # For images/videos height = Column(Integer, nullable=True) # For images/videos duration = Column(Integer, nullable=True) # For videos/audio in seconds thumbnail_path = Column(String, nullable=True) # For videos/images is_processed = Column(Boolean, default=False) # For media processing created_at = Column(DateTime(timezone=True), server_default=func.now()) # Relationships message = relationship("Message", back_populates="media_files") uploader = relationship("User", back_populates="sent_media")