import { query } from "./_generated/server"; import { v } from "convex/values"; const QUEUE_RENAME_LOOKUP: Record = { "Suporte N1": "Chamados", "suporte-n1": "Chamados", "Suporte N2": "Laboratório", "suporte-n2": "Laboratório", }; function renameQueueString(value: string) { const direct = QUEUE_RENAME_LOOKUP[value]; if (direct) return direct; const normalizedKey = value.replace(/\s+/g, "-").toLowerCase(); return QUEUE_RENAME_LOOKUP[normalizedKey] ?? value; } export const summary = query({ args: { tenantId: v.string() }, handler: async (ctx, { tenantId }) => { const queues = await ctx.db.query("queues").withIndex("by_tenant", (q) => q.eq("tenantId", tenantId)).collect(); // Compute counts per queue const result = await Promise.all( queues.map(async (qItem) => { const pending = await ctx.db .query("tickets") .withIndex("by_tenant_queue", (q) => q.eq("tenantId", tenantId).eq("queueId", qItem._id)) .collect(); const waiting = pending.filter((t) => t.status === "PENDING" || t.status === "ON_HOLD").length; const open = pending.filter((t) => t.status !== "RESOLVED" && t.status !== "CLOSED").length; const breached = 0; // Placeholder, SLAs later return { id: qItem._id, name: renameQueueString(qItem.name), pending: open, waiting, breached }; }) ); return result; }, });