"""Analytics dashboard/metrics API router.""" from fastapi import APIRouter, Depends, status from app.core.logging import get_logger from app.dependencies.auth import get_current_user, TokenUser from app.dashboard.schemas.schema import ( MetricUpsert, MetricResponse, MetricListRequest, DashboardSummaryRequest, StatusResponse, ) from app.dashboard.services.service import MetricService logger = get_logger(__name__) router = APIRouter(prefix="/metrics", tags=["dashboard", "metrics"]) @router.post("", response_model=StatusResponse, status_code=status.HTTP_201_CREATED, summary="Upsert a metric snapshot") async def upsert_metric( payload: MetricUpsert, current_user: TokenUser = Depends(get_current_user), ): metric_id = await MetricService.upsert_metric(payload) return StatusResponse(success=True, message="Metric upserted", metric_id=metric_id) @router.post("/list", summary="List metrics with filters and optional projection") async def list_metrics( payload: MetricListRequest, current_user: TokenUser = Depends(get_current_user), ): results = await MetricService.list_metrics( filters=payload.filters, skip=payload.skip, limit=payload.limit, projection_list=payload.projection_list, ) total = await MetricService.count_metrics(payload.filters) return {"success": True, "total": total, "skip": payload.skip, "limit": payload.limit, "data": results} @router.post("/dashboard/summary", summary="Get aggregated dashboard summary for a merchant") async def dashboard_summary( payload: DashboardSummaryRequest, current_user: TokenUser = Depends(get_current_user), ): summary = await MetricService.get_dashboard_summary(payload) return {"success": True, **summary}