From 650f9b8100bd117dd3010b76911f736ddc646e89 Mon Sep 17 00:00:00 2001 From: lorentz Date: Wed, 15 Jul 2026 22:35:47 -0400 Subject: [PATCH] fix(18): decouple campaigns count-query params from list-query placeholder numbering The count query reused statusFilter (built with $3 against the list query's 3-element params array) but only passed a 1-element params array, causing a Postgres bind-parameter mismatch (500) on any `?status=` filtered request. Pre-existing since 18-03; surfaced by the 18-04 gap-closure code re-review. Gives the count query its own independent param array/placeholder numbering. --- app/api/phishing/campaigns/route.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/api/phishing/campaigns/route.ts b/app/api/phishing/campaigns/route.ts index aac35d2..cbe895b 100644 --- a/app/api/phishing/campaigns/route.ts +++ b/app/api/phishing/campaigns/route.ts @@ -50,9 +50,16 @@ export async function GET(request: NextRequest) { params ); + const countParams: unknown[] = []; + let countFilter = ''; + if (status) { + countParams.push(status); + countFilter = `WHERE status = $${countParams.length}`; + } + const totalRes = await postgresClient.query<{ count: string }>( - `SELECT COUNT(*)::text AS count FROM campaigns ${statusFilter}`, - status ? [status] : [] + `SELECT COUNT(*)::text AS count FROM campaigns ${countFilter}`, + countParams ); const total = parseInt(totalRes.rows[0]?.count ?? '0', 10);