From b5ffdbc0918827c6d58ccff6e6f49f60fdd50dc3 Mon Sep 17 00:00:00 2001 From: Simon Axelsson Date: Mon, 7 Sep 2026 18:06:46 +0200 Subject: [PATCH] feat: expose tenant-safe dataset describe route --- app/api/0pt/datasets/[datasetId]/route.ts | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 app/api/0pt/datasets/[datasetId]/route.ts diff --git a/app/api/0pt/datasets/[datasetId]/route.ts b/app/api/0pt/datasets/[datasetId]/route.ts new file mode 100644 index 0000000..36e21bb --- /dev/null +++ b/app/api/0pt/datasets/[datasetId]/route.ts @@ -0,0 +1,27 @@ +import { NextRequest, NextResponse } from "next/server"; + +import { assertTenantMatchesVerified } from "@/src/http/tenant-guard"; +import { siaxErrorResponse } from "@/src/http/siax-error-response"; +import { SiaxError } from "@/src/platform/errors"; +import { datasetService } from "@/src/services/datasets"; + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ datasetId: string }> }, +) { + try { + const { datasetId } = await params; + const tenantId = new URL(request.url).searchParams.get("tenant_id")?.trim(); + if (!tenantId) throw new SiaxError("INVALID_REQUEST", "0pt.dataset", "tenant_id is required"); + const guard = assertTenantMatchesVerified(request, tenantId); + if (guard) return guard; + + const dataset = await datasetService.getDataset(datasetId); + if (dataset.tenant_id !== tenantId) { + throw new SiaxError("NOT_FOUND", "0pt.dataset", `dataset ${datasetId} not found`); + } + return NextResponse.json(dataset); + } catch (error: unknown) { + return siaxErrorResponse(error); + } +}