from sqlalchemy import Column, Integer, String, DateTime, Float, ForeignKey from sqlalchemy.orm import relationship from .database import Base import datetime class DuplicateReport(Base): __tablename__ = "duplicate_reports" id = Column(Integer, primary_key=True, index=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) status = Column(String) groups = relationship("DuplicateFileGroup", back_populates="report") class VideoFile(Base): __tablename__ = "video_files" id = Column(Integer, primary_key=True, index=True) filepath = Column(String, unique=True, index=True) filename = Column(String) size = Column(Integer) duration = Column(Float) phash = Column(String) contact_sheet_path = Column(String, nullable=True) scene_phash = Column(String, nullable=True) class DuplicateFileGroup(Base): __tablename__ = "duplicate_file_groups" id = Column(Integer, primary_key=True, index=True) report_id = Column(Integer, ForeignKey("duplicate_reports.id")) score = Column(Float) report = relationship("DuplicateReport", back_populates="groups") files = relationship("DuplicateFile", back_populates="group") class DuplicateFile(Base): __tablename__ = "duplicate_files" id = Column(Integer, primary_key=True, index=True) group_id = Column(Integer, ForeignKey("duplicate_file_groups.id")) video_file_id = Column(Integer, ForeignKey("video_files.id")) group = relationship("DuplicateFileGroup", back_populates="files") video_file = relationship("VideoFile") class TaskHistory(Base): __tablename__ = "task_history" id = Column(Integer, primary_key=True, index=True) task_id = Column(String, index=True) # Huey Task ID name = Column(String) status = Column(String) # running, success, failed start_time = Column(DateTime, default=datetime.datetime.utcnow) end_time = Column(DateTime, nullable=True) details = Column(String, nullable=True)