diff --git a/backend/routers/grievances.py b/backend/routers/grievances.py index ad60275..d8f462a 100644 --- a/backend/routers/grievances.py +++ b/backend/routers/grievances.py @@ -402,15 +402,19 @@ def get_closure_status( GrievanceFollower.grievance_id == grievance_id ).scalar() - confirmations_count = db.query(func.count(ClosureConfirmation.id)).filter( - ClosureConfirmation.grievance_id == grievance_id, - ClosureConfirmation.confirmation_type == "confirmed" - ).scalar() + # Optimized: Single query with group_by replaces multiple count queries + closure_counts = db.query( + ClosureConfirmation.confirmation_type, + func.count(ClosureConfirmation.id) + ).filter( + ClosureConfirmation.grievance_id == grievance_id + ).group_by( + ClosureConfirmation.confirmation_type + ).all() - disputes_count = db.query(func.count(ClosureConfirmation.id)).filter( - ClosureConfirmation.grievance_id == grievance_id, - ClosureConfirmation.confirmation_type == "disputed" - ).scalar() + counts_dict = {ctype: count for ctype, count in closure_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))