From 9ef50ebf7c3723afd139ee077579652ab98427f9 Mon Sep 17 00:00:00 2001 From: RohanExploit <178623867+RohanExploit@users.noreply.github.com> Date: Wed, 13 May 2026 15:22:42 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Bolt:=20[performance=20improvement]?= =?UTF-8?q?=20Optimize=20closure=20status=20counts=20via=20GROUP=20BY?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/closure_service.py | 17 +++++++++-------- backend/routers/grievances.py | 15 ++++++++------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/backend/closure_service.py b/backend/closure_service.py index f4ecf984..9ca652a7 100644 --- a/backend/closure_service.py +++ b/backend/closure_service.py @@ -139,14 +139,15 @@ def check_and_finalize_closure(grievance_id: int, db: Session) -> dict: ).scalar() # Get all confirmation counts in a single query instead of multiple round-trips - from sqlalchemy import case - stats = db.query( - func.sum(case((ClosureConfirmation.confirmation_type == 'confirmed', 1), else_=0)).label('confirmed'), - func.sum(case((ClosureConfirmation.confirmation_type == 'disputed', 1), else_=0)).label('disputed') - ).filter(ClosureConfirmation.grievance_id == grievance_id).first() - - confirmations_count = stats.confirmed or 0 - disputes_count = stats.disputed or 0 + # Optimized: Use group_by instead of sum(case) for better aggregation performance + counts = db.query( + ClosureConfirmation.confirmation_type, + func.count(ClosureConfirmation.id) + ).filter(ClosureConfirmation.grievance_id == grievance_id).group_by(ClosureConfirmation.confirmation_type).all() + + counts_dict = dict(counts) + confirmations_count = counts_dict.get('confirmed', 0) + disputes_count = counts_dict.get('disputed', 0) required_confirmations = max(1, int(total_followers * ClosureService.CONFIRMATION_THRESHOLD)) diff --git a/backend/routers/grievances.py b/backend/routers/grievances.py index 9aa24312..f13e3590 100644 --- a/backend/routers/grievances.py +++ b/backend/routers/grievances.py @@ -435,14 +435,15 @@ def get_closure_status( ).scalar() # Get all confirmation counts in a single query instead of multiple round-trips - from sqlalchemy import case - stats = db.query( - func.sum(case((ClosureConfirmation.confirmation_type == 'confirmed', 1), else_=0)).label('confirmed'), - func.sum(case((ClosureConfirmation.confirmation_type == 'disputed', 1), else_=0)).label('disputed') - ).filter(ClosureConfirmation.grievance_id == grievance_id).first() + # Optimized: Use group_by instead of sum(case) for better aggregation performance + counts = db.query( + ClosureConfirmation.confirmation_type, + func.count(ClosureConfirmation.id) + ).filter(ClosureConfirmation.grievance_id == grievance_id).group_by(ClosureConfirmation.confirmation_type).all() - confirmations_count = stats.confirmed or 0 - disputes_count = stats.disputed or 0 + counts_dict = dict(counts) + confirmations_count = counts_dict.get('confirmed', 0) + disputes_count = counts_dict.get('disputed', 0) required_confirmations = max(1, int(total_followers * ClosureService.CONFIRMATION_THRESHOLD))