Files
fund-tracer/backend/app/api/v1/assessments.py
2026-03-12 12:32:29 +08:00

66 lines
2.2 KiB
Python

from uuid import UUID
from datetime import datetime, timezone
from fastapi import APIRouter, Depends, Query, HTTPException
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import selectinload
from app.core.database import get_db
from app.models.assessment import FraudAssessment, ConfidenceLevel
from app.repositories.assessment_repo import AssessmentRepository
from app.schemas.assessment import (
AssessmentOut,
AssessmentListOut,
ReviewSubmit,
InquirySuggestionOut,
)
from app.services.assessment_service import generate_inquiry_suggestions
router = APIRouter()
@router.get("/cases/{case_id}/assessments", response_model=AssessmentListOut)
async def list_assessments(
case_id: UUID,
confidence_level: ConfidenceLevel | None = None,
db: AsyncSession = Depends(get_db),
):
repo = AssessmentRepository(db)
items, total = await repo.list_by_case(case_id, confidence_level=confidence_level)
return AssessmentListOut(items=items, total=total)
@router.post("/assessments/{assessment_id}/review", response_model=AssessmentOut)
async def review_assessment(
assessment_id: UUID,
body: ReviewSubmit,
db: AsyncSession = Depends(get_db),
):
repo = AssessmentRepository(db)
assessment = await repo.get(assessment_id)
if not assessment:
raise HTTPException(404, "认定记录不存在")
assessment = await repo.update(assessment, {
"review_status": body.review_status,
"review_note": body.review_note,
"reviewed_by": body.reviewed_by,
"reviewed_at": datetime.now(timezone.utc),
})
# eager-load the transaction relationship to avoid lazy-load in async context
result = await db.execute(
select(FraudAssessment)
.options(selectinload(FraudAssessment.transaction))
.where(FraudAssessment.id == assessment_id)
)
assessment = result.scalar_one()
return assessment
@router.get("/cases/{case_id}/inquiry-suggestions", response_model=InquirySuggestionOut)
async def get_inquiry_suggestions(case_id: UUID, db: AsyncSession = Depends(get_db)):
suggestions = await generate_inquiry_suggestions(case_id, db)
return InquirySuggestionOut(suggestions=suggestions)