import uuid from sqlalchemy import Column, String, Integer, BigInteger, DateTime, ForeignKey, Index from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.core.database import Base class AttachmentVersion(Base): __tablename__ = "pjctrl_attachment_versions" id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) attachment_id = Column(String(36), ForeignKey("pjctrl_attachments.id", ondelete="CASCADE"), nullable=False) version = Column(Integer, nullable=False) file_path = Column(String(1000), nullable=False) file_size = Column(BigInteger, nullable=False) checksum = Column(String(64), nullable=False) # SHA-256 uploaded_by = Column(String(36), ForeignKey("pjctrl_users.id", ondelete="SET NULL"), nullable=True) created_at = Column(DateTime, server_default=func.now(), nullable=False) # Relationships attachment = relationship("Attachment", back_populates="versions") uploader = relationship("User", foreign_keys=[uploaded_by]) __table_args__ = ( Index("idx_version_attachment", "attachment_id", "version"), )