decode.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. """Formal decode API routes."""
  2. from __future__ import annotations
  3. from typing import Any
  4. from uuid import UUID
  5. from fastapi import APIRouter, Depends, HTTPException
  6. from app.dependencies import get_decode_repository
  7. from app.schemas import DecodeResultSchema
  8. router = APIRouter(prefix="/api/decode", tags=["decode"])
  9. @router.get("/items/{item_id}/result", response_model=DecodeResultSchema)
  10. def decode_result(
  11. item_id: UUID,
  12. repo: Any = Depends(get_decode_repository),
  13. ) -> DecodeResultSchema:
  14. getter = getattr(repo, "get_decode_result_for_item", None)
  15. if getter is None:
  16. raise HTTPException(status_code=501, detail="decode result reader is not implemented")
  17. return DecodeResultSchema.model_validate(getter(item_id))
  18. @router.post("/items/{item_id}/jobs")
  19. def enqueue_decode_job(
  20. item_id: UUID,
  21. repo: Any = Depends(get_decode_repository),
  22. ) -> dict[str, Any]:
  23. create = getattr(repo, "create_decode_job", None)
  24. if create is None:
  25. raise HTTPException(status_code=501, detail="decode job writer is not implemented")
  26. job = create(item_id=item_id, status="pending")
  27. return {"job": job.model_dump(mode="json") if hasattr(job, "model_dump") else job}