From 198edaf3e87765649194170292610232aac1acc7 Mon Sep 17 00:00:00 2001 From: RohanExploit <178623867+RohanExploit@users.noreply.github.com> Date: Wed, 4 Mar 2026 14:25:47 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Bolt:=20Optimize=20get=5Fsystem=5Fs?= =?UTF-8?q?tats=20query?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/routers/admin.py | 18 +++++++++++++----- pytest.ini | 3 +++ 2 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 pytest.ini diff --git a/backend/routers/admin.py b/backend/routers/admin.py index 702c270c..34a85a46 100644 --- a/backend/routers/admin.py +++ b/backend/routers/admin.py @@ -1,5 +1,6 @@ from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session +from sqlalchemy import func, case from typing import List from backend.database import get_db @@ -20,11 +21,18 @@ def get_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): @router.get("/stats") def get_system_stats(db: Session = Depends(get_db)): - total_users = db.query(User).count() - admin_users = db.query(User).filter(User.role == UserRole.ADMIN).count() + """ + Get system statistics. + Optimized: Uses a single query with aggregates instead of 3 separate count queries. + """ + stats = db.query( + func.count(User.id).label('total_users'), + func.sum(case((User.role == UserRole.ADMIN, 1), else_=0)).label('admin_count'), + func.sum(case((User.is_active == True, 1), else_=0)).label('active_users') + ).first() return { - "total_users": total_users, - "admin_count": admin_users, - "active_users": db.query(User).filter(User.is_active == True).count(), + "total_users": stats.total_users or 0, + "admin_count": stats.admin_count or 0, + "active_users": stats.active_users or 0, } diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 00000000..c8c9c757 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,3 @@ +[pytest] +asyncio_mode = auto +asyncio_default_fixture_loop_scope = function