From 921ea4e63dd3b8a3de4e322fff106e1305daa65f Mon Sep 17 00:00:00 2001 From: SJCoetz Date: Thu, 30 Jul 2026 22:11:55 +0200 Subject: [PATCH] fix(stock-quick-draft): parseInt limit + exhaustive status map Co-authored-by: Orca --- src/app/api/v1/stock-quick-draft/add-line/route.ts | 9 +++++++-- src/app/api/v1/stock-quick-draft/search/route.ts | 5 ++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/app/api/v1/stock-quick-draft/add-line/route.ts b/src/app/api/v1/stock-quick-draft/add-line/route.ts index 9923c1b..a9feaf3 100644 --- a/src/app/api/v1/stock-quick-draft/add-line/route.ts +++ b/src/app/api/v1/stock-quick-draft/add-line/route.ts @@ -1,6 +1,11 @@ import { NextRequest, NextResponse } from "next/server"; import { getAdminPocketBase } from "@/lib/server/pocketbase-admin"; -import { addQuickDraftLine } from "@/lib/server/stock-quick-draft-service"; +import { + addQuickDraftLine, + type AddQuickDraftLineResult, +} from "@/lib/server/stock-quick-draft-service"; + +type FailureReason = Extract["reason"]; /** * POST /api/v1/stock-quick-draft/add-line @@ -31,7 +36,7 @@ import { addQuickDraftLine } from "@/lib/server/stock-quick-draft-service"; export const runtime = "nodejs"; export const dynamic = "force-dynamic"; -const STATUS_BY_REASON: Record = { +const STATUS_BY_REASON: Record = { validation: 400, supplier_not_found: 404, stock_item_not_found: 404, diff --git a/src/app/api/v1/stock-quick-draft/search/route.ts b/src/app/api/v1/stock-quick-draft/search/route.ts index 5dbbe98..4e2292a 100644 --- a/src/app/api/v1/stock-quick-draft/search/route.ts +++ b/src/app/api/v1/stock-quick-draft/search/route.ts @@ -21,7 +21,10 @@ export async function GET(req: NextRequest) { const { searchParams } = new URL(req.url); const q = (searchParams.get("q") ?? "").trim(); const limitRaw = searchParams.get("limit"); - const limit = limitRaw ? Number(limitRaw) : undefined; + const parsed = limitRaw ? Number.parseInt(limitRaw, 10) : NaN; + // NaN / non-finite → undefined so the service uses its documented default + // rather than propagating an invalid `perPage` to PocketBase (which 500s). + const limit = Number.isFinite(parsed) ? parsed : undefined; if (q.length < 2) { return NextResponse.json(