"""长任务轮询端点 GET /jobs/:id(ARCH §7.4)。""" from __future__ import annotations import uuid from typing import Annotated from fastapi import APIRouter, Depends from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from ww_db import get_session from ww_db.models import Job from ww_shared import AppError, ErrorCode router = APIRouter(prefix="/jobs", tags=["jobs"]) @router.get("/{job_id}") async def get_job( job_id: uuid.UUID, session: Annotated[AsyncSession, Depends(get_session)], ) -> dict[str, object]: job = (await session.execute(select(Job).where(Job.id == job_id))).scalar_one_or_none() if job is None: raise AppError(ErrorCode.NOT_FOUND, f"job {job_id} not found") return { "id": str(job.id), "kind": job.kind, "status": job.status, "progress": job.progress, "result": job.result, "error": job.error, }