""" Simple job record schema for tracking synchronous batch operations. """ from sqlalchemy import Column, Integer, String, DateTime, Text, JSON, Index from sqlalchemy.sql import func from app.models.base import BaseModel class JobRecord(BaseModel): """ Minimal job tracking record (no worker/queue yet). Used to record outcomes and downloadable bundle info for synchronous jobs such as batch document generation. """ __tablename__ = "jobs" id = Column(Integer, primary_key=True, autoincrement=True, index=True) job_id = Column(String(100), unique=True, nullable=False, index=True) job_type = Column(String(64), nullable=False, index=True) # e.g., documents_batch status = Column(String(32), nullable=False, index=True) # running|completed|failed # Request/identity requested_by_username = Column(String(150), nullable=True, index=True) # Timing started_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False, index=True) completed_at = Column(DateTime(timezone=True), nullable=True, index=True) # Metrics total_requested = Column(Integer, nullable=False, default=0) total_success = Column(Integer, nullable=False, default=0) total_failed = Column(Integer, nullable=False, default=0) # Result bundle (if any) result_storage_path = Column(String(512), nullable=True) result_mime_type = Column(String(100), nullable=True) result_size = Column(Integer, nullable=True) # Arbitrary details/metadata for easy querying details = Column(JSON, nullable=True) __table_args__ = ( Index("ix_jobs_type_status", "job_type", "status"), {}, ) def __repr__(self): return ( f"" )