from __future__ import annotations from datetime import datetime from typing import Literal from uuid import UUID from cpv3.common.schemas import Schema JobStatusEnum = Literal["PENDING", "RUNNING", "FAILED", "CANCELLED", "DONE"] JobTypeEnum = Literal[ "MEDIA_PROBE", "SILENCE_REMOVE", "SILENCE_DETECT", "SILENCE_APPLY", "MEDIA_CONVERT", "TRANSCRIPTION_GENERATE", "CAPTIONS_GENERATE", "FRAME_EXTRACT", ] class JobRead(Schema): id: UUID broker_id: str user_id: UUID | None project_id: UUID | None input_data: dict | None output_data: dict | None status: JobStatusEnum job_type: JobTypeEnum project_pct: float | None error_message: str | None current_message: str | None started_at: datetime | None finished_at: datetime | None is_active: bool created_at: datetime updated_at: datetime class JobCreate(Schema): broker_id: str project_id: UUID | None = None input_data: dict | None = None status: JobStatusEnum = "PENDING" job_type: JobTypeEnum class JobUpdate(Schema): output_data: dict | None = None status: JobStatusEnum | None = None project_pct: float | None = None error_message: str | None = None current_message: str | None = None started_at: datetime | None = None finished_at: datetime | None = None class JobEventRead(Schema): id: UUID job_id: UUID event_type: str payload: dict | None is_active: bool created_at: datetime updated_at: datetime class JobEventCreate(Schema): job_id: UUID event_type: str payload: dict | None = None class JobEventUpdate(Schema): payload: dict | None = None