from __future__ import annotations from fastapi import Depends, HTTPException, Query from sqlalchemy.ext.asyncio import AsyncSession from .helpers import _resolve_tenant_id from .shared import * from ...dependencies.permissions import require_manager_user from ...services.adaptive_rag_service import AdaptiveRAGService @router.get("/query-route-governance/summary") async def get_query_route_governance_summary( project_id: int | None = Query(default=None), window_days: int | None = Query(default=None), current_user: User = Depends(require_manager_user), db: AsyncSession = Depends(get_db), tenant_id: int = Depends(get_tenant_id), ): service = AdaptiveRAGService(db, tenant_id=_resolve_tenant_id(current_user, tenant_id)) try: data = await service.query_route_governance_summary( project_id=project_id, window_days=window_days, ) except ValueError as exc: raise HTTPException(status_code=400, detail=str(exc)) from exc return success_response(data) @router.get("/query-route-governance/items") async def list_query_route_governance_records( project_id: int | None = Query(default=None), window_days: int | None = Query(default=None), route_mode: str | None = Query(default=None), decision_origin: str | None = Query(default=None), rating: str | None = Query(default=None), mismatch_only: bool = Query(default=False), clarify_only: bool = Query(default=False), search: str | None = Query(default=None), limit: int = Query(default=20, ge=1, le=100), offset: int = Query(default=0, ge=0), current_user: User = Depends(require_manager_user), db: AsyncSession = Depends(get_db), tenant_id: int = Depends(get_tenant_id), ): service = AdaptiveRAGService(db, tenant_id=_resolve_tenant_id(current_user, tenant_id)) try: data = await service.list_query_route_governance_records( project_id=project_id, window_days=window_days, route_mode=route_mode, decision_origin=decision_origin, rating=rating, mismatch_only=mismatch_only, clarify_only=clarify_only, search=search, limit=limit, offset=offset, ) except ValueError as exc: raise HTTPException(status_code=400, detail=str(exc)) from exc return success_response(data) @router.get("/query-route-governance/items/{record_id}") async def get_query_route_governance_detail( record_id: int, project_id: int | None = Query(default=None), current_user: User = Depends(require_manager_user), db: AsyncSession = Depends(get_db), tenant_id: int = Depends(get_tenant_id), ): service = AdaptiveRAGService(db, tenant_id=_resolve_tenant_id(current_user, tenant_id)) data = await service.get_query_route_governance_detail( record_id=record_id, project_id=project_id, ) if data is None: raise HTTPException(status_code=404, detail="query route record not found") return success_response(data)