This commit is contained in:
2026-03-30 09:53:10 -03:00
parent 4220b0418e
commit aac27b8504
32 changed files with 1068 additions and 329 deletions

View File

@@ -2,6 +2,7 @@
from __future__ import annotations
from datetime import datetime
from typing import Optional
from uuid import UUID
@@ -10,10 +11,70 @@ from sqlmodel import Session, select
from .models import Job
def list_jobs(session: Session, parent_id: Optional[UUID] = None, status: Optional[str] = None) -> list[Job]:
def create_job(
session: Session,
source_asset_id: UUID,
video_path: str,
timeline_id: UUID,
profile_name: str = "soccer_broadcast",
run_type: str = "initial",
parent_id: UUID | None = None,
config_overrides: dict | None = None,
) -> Job:
job = Job(
source_asset_id=source_asset_id,
video_path=video_path,
timeline_id=timeline_id,
profile_name=profile_name,
run_type=run_type,
parent_id=parent_id,
config_overrides=config_overrides or {},
status="pending",
)
session.add(job)
session.commit()
session.refresh(job)
return job
def update_job_status(
session: Session,
job_id: UUID,
status: str,
current_stage: str | None = None,
error_message: str | None = None,
):
job = session.get(Job, job_id)
if not job:
return
job.status = status
if current_stage is not None:
job.current_stage = current_stage
if error_message is not None:
job.error_message = error_message
if status == "running" and not job.started_at:
job.started_at = datetime.utcnow()
if status in ("completed", "failed", "cancelled"):
job.completed_at = datetime.utcnow()
session.commit()
def get_job(session: Session, job_id: UUID) -> Job | None:
return session.get(Job, job_id)
def list_jobs(
session: Session,
timeline_id: UUID | None = None,
parent_id: UUID | None = None,
status: str | None = None,
) -> list[Job]:
stmt = select(Job)
if timeline_id:
stmt = stmt.where(Job.timeline_id == timeline_id)
if parent_id:
stmt = stmt.where(Job.parent_id == parent_id)
if status:
stmt = stmt.where(Job.status == status)
stmt = stmt.order_by(Job.created_at.desc())
return list(session.exec(stmt).all())