finai/backend/app/api/stats.py

29 lines
1.2 KiB
Python

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,
)