"""The single external JSON report follow-up endpoint.""" from typing import Annotated from fastapi import APIRouter, Depends, Request from fastapi.responses import JSONResponse from app.api.dependencies import DatabaseSession from app.api.v1.integration_risk import IntegrationRoute, integration_client from app.core.exceptions import AppException from app.schemas.common import ApiResponse from app.schemas.integration_follow_up import IntegrationFollowUpData, IntegrationFollowUpRequest from app.services.integration_follow_up import IntegrationFollowUpService router = APIRouter(prefix="/integrations/risk-assessments", tags=["integrations"], route_class=IntegrationRoute) async def follow_up_client(request: Request, session: DatabaseSession) -> str: if request.headers.get("X-Signature-Version") != "2": raise AppException("报告追问要求 X-Signature-Version: 2", code=401, status_code=401) return await integration_client(request, session) ClientId = Annotated[str, Depends(follow_up_client)] @router.post( "/follow-up", response_model=ApiResponse[IntegrationFollowUpData], responses={202: {"description": "同一问题正在生成,请使用原编号原内容重试本接口"}}, ) async def follow_up_report( request: Request, payload: IntegrationFollowUpRequest, session: DatabaseSession, client_id: ClientId, ) -> ApiResponse[IntegrationFollowUpData] | JSONResponse: if request.headers.get("Idempotency-Key") != payload.message_request_id: raise AppException("Idempotency-Key 必须与 messageRequestId 一致", code=422, status_code=422) data = await IntegrationFollowUpService(session).ask(client_id, payload) if data.status == "processing": return JSONResponse( status_code=202, headers={"Retry-After": "3"}, content=ApiResponse(code=202, message="原问题正在生成,请用相同编号重试", data=data).model_dump( mode="json", by_alias=True ), ) return ApiResponse(data=data)