From 15e9d13e6a9e3370dc1bb3b056dbfa4756667a5b Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Sun, 7 Sep 2025 07:37:32 +0000 Subject: [PATCH] Improve ticket statistics calculation and data retrieval Refactors the database storage logic to separately query for ticket counts by status, priority, and total. This change enhances data retrieval efficiency and accuracy for displaying ticket statistics. Replit-Commit-Author: Agent Replit-Commit-Session-Id: dc17873f-d870-4f45-9108-207794b849f7 Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/dc17873f-d870-4f45-9108-207794b849f7/FxJjNBe --- server/storage.ts | 48 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/server/storage.ts b/server/storage.ts index 8a40786..e8c8687 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -2276,37 +2276,65 @@ export class DatabaseStorage implements IStorage { resolvedTickets: number; criticalTickets: number; }> { - let query = db.select({ count: sql`count(*)`, status: savTickets.status, priority: savTickets.priority }) - .from(savTickets); + let baseQuery = db.select().from(savTickets); if (groupIds?.length) { - query = query.where(inArray(savTickets.groupId, groupIds)); + baseQuery = baseQuery.where(inArray(savTickets.groupId, groupIds)); } - const results = await query.groupBy(savTickets.status, savTickets.priority); + // Get status counts + const statusResults = await db + .select({ + count: sql`count(*)`, + status: savTickets.status + }) + .from(savTickets) + .where(groupIds?.length ? inArray(savTickets.groupId, groupIds) : undefined) + .groupBy(savTickets.status); + + // Get priority counts + const priorityResults = await db + .select({ + count: sql`count(*)`, + priority: savTickets.priority + }) + .from(savTickets) + .where(groupIds?.length ? inArray(savTickets.groupId, groupIds) : undefined) + .groupBy(savTickets.priority); + + // Get total count + const totalResult = await db + .select({ count: sql`count(*)` }) + .from(savTickets) + .where(groupIds?.length ? inArray(savTickets.groupId, groupIds) : undefined); const stats = { - totalTickets: 0, + totalTickets: Number(totalResult[0]?.count || 0), newTickets: 0, inProgressTickets: 0, resolvedTickets: 0, criticalTickets: 0, }; - results.forEach(result => { - const count = result.count || 0; - stats.totalTickets += count; + // Process status results + statusResults.forEach(result => { + const count = Number(result.count || 0); if (result.status === 'nouveau') { - stats.newTickets += count; + stats.newTickets = count; } else if (['en_cours', 'attente_pieces', 'attente_echange'].includes(result.status)) { stats.inProgressTickets += count; } else if (['resolu', 'ferme'].includes(result.status)) { stats.resolvedTickets += count; } + }); + // Process priority results for critical tickets + priorityResults.forEach(result => { + const count = Number(result.count || 0); + if (result.priority === 'critique') { - stats.criticalTickets += count; + stats.criticalTickets = count; } });