DealDocumentScreening/src/contract_check/api/routes/reports.py
2026-08-23 20:21:32 +03:00

42 lines
1.1 KiB
Python

"""Report polling endpoint."""
from __future__ import annotations
from uuid import UUID
from fastapi import APIRouter, HTTPException
from ..deps import AsyncSessionDep, CurrentUserDep, fetch_document_status_for_user
router = APIRouter(tags=["reports"])
@router.get("/api/v1/reports/{document_id}")
async def get_report(
session: AsyncSessionDep,
document_id: UUID,
user: CurrentUserDep,
) -> dict[str, object]:
row = await fetch_document_status_for_user(session, document_id, user.user_id)
if row is None:
raise HTTPException(status_code=404, detail="report not found")
status = row["status"]
if status != "done":
return {
"document_id": str(document_id),
"status": status,
"stage": row["stage"],
}
return {
"document_id": str(document_id),
"status": status,
"filename": row["filename"],
"markdown": row["markdown"],
"findings": row["content_json"],
"model_used": row["model_used"],
"prompt_tokens": row["prompt_tokens"],
"eval_tokens": row["eval_tokens"],
"latency_ms": row["latency_ms"],
}