class ProcessingTask(Base): """Background processing tasks table""" __tablename__ = 'processing_tasks' task_id = Column(String(36), primary_key=True) # UUID status = Column(String(20), default='queued') # queued, processing, completed, failed progress = Column(Float, default=0.0) filename = Column(String(255), nullable=False) created_at = Column(DateTime, default=datetime.now) updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now) completion_time = Column(DateTime, nullable=True) # Task metadata/results user_email = Column(String(100), nullable=True) user_department = Column(String(100), nullable=True) # Store results/errors as JSON results = Column(JSON, nullable=True) error = Column(String, nullable=True) # Execution stats current_frame = Column(Integer, default=0) total_frames = Column(Integer, default=0) def to_dict(self): return { 'task_id': self.task_id, 'status': self.status, 'progress': self.progress, 'filename': self.filename, 'created_at': self.created_at.isoformat() if self.created_at else None, 'updated_at': self.updated_at.isoformat() if self.updated_at else None, 'completion_time': self.completion_time.isoformat() if self.completion_time else None, 'results': self.results, 'error': self.error, 'current_frame': self.current_frame, 'total_frames': self.total_frames }