amazon-transcreation/backend/app/api/v1/reports.py
DJP 5ef7e588b6 feat: wire analytics to real data and add audit logging across all endpoints
Replace mock chart data on reports page with real backend queries (jobs over
time, locale stats, usage stats, quality metrics). Add audit logging to auth
(login/login_failed), file management (upload/delete TM and reference files),
and feedback submission so the system logs page shows complete activity.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 17:17:14 -04:00

78 lines
2.7 KiB
Python

from datetime import datetime
from typing import Any
from uuid import UUID
from fastapi import APIRouter, Depends, Query
from sqlalchemy.ext.asyncio import AsyncSession
from app.dependencies import get_current_user, get_db
from app.services.report_service import ReportService
router = APIRouter(prefix="/reports", tags=["reports"])
report_service = ReportService()
@router.get("/usage")
async def get_usage_stats(
client_id: UUID | None = Query(None),
date_from: datetime | None = Query(None),
date_to: datetime | None = Query(None),
db: AsyncSession = Depends(get_db),
current_user: dict = Depends(get_current_user),
) -> dict[str, Any]:
"""Get usage statistics (total jobs, tokens, cost, status breakdown)."""
return await report_service.get_usage_stats(
db, client_id=client_id, date_from=date_from, date_to=date_to
)
@router.get("/tokens")
async def get_token_cost_data(
client_id: UUID | None = Query(None),
date_from: datetime | None = Query(None),
date_to: datetime | None = Query(None),
db: AsyncSession = Depends(get_db),
current_user: dict = Depends(get_current_user),
) -> list[dict[str, Any]]:
"""Get token usage and cost data grouped by day."""
return await report_service.get_token_cost_data(
db, client_id=client_id, date_from=date_from, date_to=date_to
)
@router.get("/quality")
async def get_quality_metrics(
client_id: UUID | None = Query(None),
db: AsyncSession = Depends(get_db),
current_user: dict = Depends(get_current_user),
) -> dict[str, Any]:
"""Get quality metrics (confidence tier distribution, feedback stats)."""
return await report_service.get_quality_metrics(db, client_id=client_id)
@router.get("/locale-stats")
async def get_locale_stats(
client_id: UUID | None = Query(None),
date_from: datetime | None = Query(None),
date_to: datetime | None = Query(None),
db: AsyncSession = Depends(get_db),
current_user: dict = Depends(get_current_user),
) -> list[dict[str, Any]]:
"""Get per-locale stats (tokens, cost, avg duration)."""
return await report_service.get_locale_stats(
db, client_id=client_id, date_from=date_from, date_to=date_to
)
@router.get("/jobs-over-time")
async def get_jobs_over_time(
client_id: UUID | None = Query(None),
date_from: datetime | None = Query(None),
date_to: datetime | None = Query(None),
db: AsyncSession = Depends(get_db),
current_user: dict = Depends(get_current_user),
) -> list[dict[str, Any]]:
"""Get job counts grouped by week for chart display."""
return await report_service.get_jobs_over_time(
db, client_id=client_id, date_from=date_from, date_to=date_to
)