| 1234567891011121314151617181920212223242526272829303132333435 |
- """Formal decode API routes."""
- from __future__ import annotations
- from typing import Any
- from uuid import UUID
- from fastapi import APIRouter, Depends, HTTPException
- from app.dependencies import get_decode_repository
- from app.schemas import DecodeResultSchema
- router = APIRouter(prefix="/api/decode", tags=["decode"])
- @router.get("/items/{item_id}/result", response_model=DecodeResultSchema)
- def decode_result(
- item_id: UUID,
- repo: Any = Depends(get_decode_repository),
- ) -> DecodeResultSchema:
- getter = getattr(repo, "get_decode_result_for_item", None)
- if getter is None:
- raise HTTPException(status_code=501, detail="decode result reader is not implemented")
- return DecodeResultSchema.model_validate(getter(item_id))
- @router.post("/items/{item_id}/jobs")
- def enqueue_decode_job(
- item_id: UUID,
- repo: Any = Depends(get_decode_repository),
- ) -> dict[str, Any]:
- create = getattr(repo, "create_decode_job", None)
- if create is None:
- raise HTTPException(status_code=501, detail="decode job writer is not implemented")
- job = create(item_id=item_id, status="pending")
- return {"job": job.model_dump(mode="json") if hasattr(job, "model_dump") else job}
|