MukeshKapoor25's picture
Initial commit
b143975
"""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}