from fastapi import APIRouter, Depends from sqlalchemy import func, select from sqlalchemy.orm import Session from app.db import get_db from app.deps import require_admin from app.models import AuditLog, Document, Message, User from app.schemas.audit import StatsOverviewResponse router = APIRouter() @router.get("/overview", response_model=StatsOverviewResponse) def overview(db: Session = Depends(get_db), _: User = Depends(require_admin)) -> StatsOverviewResponse: question_count = db.scalar(select(func.count(Message.id))) or 0 active_user_count = db.scalar(select(func.count(User.id)).where(User.status == "active")) or 0 document_count = db.scalar(select(func.count(Document.id)).where(Document.status != "deleted")) or 0 audit_count = db.scalar(select(func.count(AuditLog.id))) or 0 token_usage = db.scalar(select(func.coalesce(func.sum(Message.token_usage), 0))) or 0 pu_usage = db.scalar(select(func.coalesce(func.sum(Message.pu_usage), 0))) or 0 return StatsOverviewResponse( question_count=question_count, active_user_count=active_user_count, document_count=document_count, audit_count=audit_count, token_usage=token_usage, pu_usage=pu_usage, )