"""Job Model""" from sqlalchemy import Column, String, Boolean, DateTime, ForeignKey, Text, Integer from sqlalchemy.dialects.postgresql import UUID, JSONB, ARRAY from sqlalchemy.orm import relationship from sqlalchemy.sql import func import uuid from app.database import Base class Job(Base): __tablename__ = "jobs" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) user_id = Column(UUID(as_uuid=True), ForeignKey("users.id", ondelete="SET NULL")) project_id = Column(UUID(as_uuid=True), ForeignKey("projects.id", ondelete="SET NULL")) # Job details module = Column(String(100), nullable=False) action = Column(String(100), nullable=False) priority = Column(Integer, default=5) # Input/Output input_data = Column(JSONB, nullable=False) output_data = Column(JSONB) input_asset_ids = Column(ARRAY(UUID(as_uuid=True))) output_asset_ids = Column(ARRAY(UUID(as_uuid=True))) # Status tracking status = Column(String(50), default="pending") progress = Column(Integer, default=0) error_message = Column(Text) retry_count = Column(Integer, default=0) max_retries = Column(Integer, default=3) # Timing queued_at = Column(DateTime(timezone=True)) started_at = Column(DateTime(timezone=True)) completed_at = Column(DateTime(timezone=True)) estimated_duration_seconds = Column(Integer) # API tracking api_provider = Column(String(100)) api_model = Column(String(100)) api_request_id = Column(String(255)) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) # Relationships user = relationship("User", back_populates="jobs") project = relationship("Project", back_populates="jobs")