From 5f7ef3fd03e8f5a50369cb0d6fcb2a827b1e4dfa Mon Sep 17 00:00:00 2001 From: Esdras Renan Date: Wed, 12 Nov 2025 22:42:45 -0300 Subject: [PATCH] fix: avoid double paginated queries --- convex/reports.ts | 82 ++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 44 deletions(-) diff --git a/convex/reports.ts b/convex/reports.ts index aa0295a..76e0aaf 100644 --- a/convex/reports.ts +++ b/convex/reports.ts @@ -266,20 +266,17 @@ export async function fetchScopedTicketsByCreatedRange( const scopedCompanyId = resolveScopedCompanyId(viewer, companyId); const results: Doc<"tickets">[] = []; - await paginateTickets( - () => { - if (scopedCompanyId) { - return ctx.db - .query("tickets") - .withIndex("by_tenant_company_created", (q) => { - let range = q.eq("tenantId", tenantId).eq("companyId", scopedCompanyId); - range = withLowerBound(range, "createdAt", startMs); - range = withUpperBound(range, "createdAt", endMs); - return range; - }) - .order("desc"); - } - return ctx.db + const query = scopedCompanyId + ? ctx.db + .query("tickets") + .withIndex("by_tenant_company_created", (q) => { + let range = q.eq("tenantId", tenantId).eq("companyId", scopedCompanyId); + range = withLowerBound(range, "createdAt", startMs); + range = withUpperBound(range, "createdAt", endMs); + return range; + }) + .order("desc") + : ctx.db .query("tickets") .withIndex("by_tenant_created", (q) => { let range = q.eq("tenantId", tenantId); @@ -288,14 +285,14 @@ export async function fetchScopedTicketsByCreatedRange( return range; }) .order("desc"); - }, - (ticket) => { - const createdAt = typeof ticket.createdAt === "number" ? ticket.createdAt : null; - if (createdAt === null) return; - if (createdAt < startMs || createdAt >= endMs) return; - results.push(ticket); - }, - ); + + const snapshot = await query.collect(); + for (const ticket of snapshot) { + const createdAt = typeof ticket.createdAt === "number" ? ticket.createdAt : null; + if (createdAt === null) continue; + if (createdAt < startMs || createdAt >= endMs) continue; + results.push(ticket); + } return results; } @@ -311,20 +308,17 @@ export async function fetchScopedTicketsByResolvedRange( const scopedCompanyId = resolveScopedCompanyId(viewer, companyId); const results: Doc<"tickets">[] = []; - await paginateTickets( - () => { - if (scopedCompanyId) { - return ctx.db - .query("tickets") - .withIndex("by_tenant_company_resolved", (q) => { - let range = q.eq("tenantId", tenantId).eq("companyId", scopedCompanyId); - range = withLowerBound(range, "resolvedAt", startMs); - range = withUpperBound(range, "resolvedAt", endMs); - return range; - }) - .order("desc"); - } - return ctx.db + const query = scopedCompanyId + ? ctx.db + .query("tickets") + .withIndex("by_tenant_company_resolved", (q) => { + let range = q.eq("tenantId", tenantId).eq("companyId", scopedCompanyId); + range = withLowerBound(range, "resolvedAt", startMs); + range = withUpperBound(range, "resolvedAt", endMs); + return range; + }) + .order("desc") + : ctx.db .query("tickets") .withIndex("by_tenant_resolved", (q) => { let range = q.eq("tenantId", tenantId); @@ -333,14 +327,14 @@ export async function fetchScopedTicketsByResolvedRange( return range; }) .order("desc"); - }, - (ticket) => { - const resolvedAt = typeof ticket.resolvedAt === "number" ? ticket.resolvedAt : null; - if (resolvedAt === null) return; - if (resolvedAt < startMs || resolvedAt >= endMs) return; - results.push(ticket); - }, - ); + + const snapshot = await query.collect(); + for (const ticket of snapshot) { + const resolvedAt = typeof ticket.resolvedAt === "number" ? ticket.resolvedAt : null; + if (resolvedAt === null) continue; + if (resolvedAt < startMs || resolvedAt >= endMs) continue; + results.push(ticket); + } return results; }