"""Database models for file storage""" from sqlalchemy import Column, String, BigInteger, DateTime, Index, ForeignKey from sqlalchemy.orm import relationship from datetime import datetime from app.core.database import Base class RoomFile(Base): """File uploaded to an incident room""" __tablename__ = "room_files" # Primary key file_id = Column(String(36), primary_key=True) # Foreign key to incident room (CASCADE delete when room is permanently deleted) room_id = Column(String(36), ForeignKey("incident_rooms.room_id", ondelete="CASCADE"), nullable=False) # File metadata uploader_id = Column(String(255), nullable=False) filename = Column(String(255), nullable=False) file_type = Column(String(20), nullable=False) # 'image', 'document', 'log' mime_type = Column(String(100), nullable=False) file_size = Column(BigInteger, nullable=False) # bytes # MinIO storage information minio_bucket = Column(String(100), nullable=False) minio_object_path = Column(String(500), nullable=False) # Timestamps uploaded_at = Column(DateTime, default=datetime.utcnow, nullable=False) deleted_at = Column(DateTime, nullable=True) # soft delete # Relationships room = relationship("IncidentRoom", back_populates="files") # Indexes __table_args__ = ( Index("ix_room_files", "room_id", "uploaded_at"), Index("ix_file_uploader", "uploader_id"), ) def __repr__(self): return f""