from __future__ import annotations from datetime import date from typing import Annotated from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session from app.api.deps import get_db from app.schemas.finance_dashboard import FinanceDashboardRead from app.schemas.system_dashboard import SystemDashboardRead from app.services.finance_dashboard import FinanceDashboardService from app.services.system_dashboard import SystemDashboardService router = APIRouter(prefix="/analytics") DbSession = Annotated[Session, Depends(get_db)] @router.get( "/system-dashboard", response_model=SystemDashboardRead, summary="查询系统看板真实指标", description="基于 Agent 运行、工具调用、用户会话和反馈数据聚合系统看板指标。", ) def get_system_dashboard( db: DbSession, days: Annotated[ int, Query(ge=1, le=30, description="统计窗口天数。"), ] = 7, ) -> SystemDashboardRead: return SystemDashboardService(db).build_dashboard(days=days) @router.get( "/finance-dashboard", response_model=FinanceDashboardRead, summary="查询财务看板真实指标", description="基于报销单据、风险观察和预算池数据聚合财务看板指标。", ) def get_finance_dashboard( db: DbSession, range_key: Annotated[str, Query(max_length=30, description="顶部时间范围。")] = "近10日", start_date: Annotated[date | None, Query(description="自定义开始日期。")] = None, end_date: Annotated[date | None, Query(description="自定义结束日期。")] = None, trend_range: Annotated[str, Query(max_length=30, description="趋势图时间范围。")] = "近12天", department_range: Annotated[str, Query(max_length=30, description="部门排行时间范围。")] = "本月", ) -> FinanceDashboardRead: return FinanceDashboardService(db).build_dashboard( range_key=range_key, start_date=start_date, end_date=end_date, trend_range=trend_range, department_range=department_range, )