first commit
This commit is contained in:
41
backend/app/api/analysis.py
Normal file
41
backend/app/api/analysis.py
Normal file
@@ -0,0 +1,41 @@
|
||||
"""Analysis API: get flow graph and summary for a case."""
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.models.database import get_db
|
||||
from app.models import Case, Transaction
|
||||
from app.schemas import TransactionResponse, AnalysisSummaryResponse, FlowGraphResponse
|
||||
from app.services.analyzer import build_flow_graph
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("/{case_id}/transactions", response_model=list[TransactionResponse])
|
||||
async def list_transactions(case_id: int, db: AsyncSession = Depends(get_db)):
|
||||
r = await db.execute(select(Case).where(Case.id == case_id))
|
||||
if not r.scalar_one_or_none():
|
||||
raise HTTPException(status_code=404, detail="Case not found")
|
||||
r = await db.execute(
|
||||
select(Transaction).where(Transaction.case_id == case_id).order_by(Transaction.transaction_time, Transaction.id)
|
||||
)
|
||||
txns = r.scalars().all()
|
||||
return [TransactionResponse.model_validate(t) for t in txns]
|
||||
|
||||
|
||||
@router.get("/{case_id}/analysis")
|
||||
async def get_analysis(case_id: int, db: AsyncSession = Depends(get_db)):
|
||||
r = await db.execute(select(Case).where(Case.id == case_id))
|
||||
if not r.scalar_one_or_none():
|
||||
raise HTTPException(status_code=404, detail="Case not found")
|
||||
r = await db.execute(select(Transaction).where(Transaction.case_id == case_id))
|
||||
txns = r.scalars().all()
|
||||
items = [TransactionResponse.model_validate(t) for t in txns]
|
||||
graph, summary = build_flow_graph(items)
|
||||
return {"summary": summary.model_dump(), "graph": graph.model_dump()}
|
||||
|
||||
|
||||
@router.post("/{case_id}/analysis")
|
||||
async def run_analysis(case_id: int, db: AsyncSession = Depends(get_db)):
|
||||
return await get_analysis(case_id, db)
|
||||
Reference in New Issue
Block a user