Files
pieced-portal/src/app/api/admin/requests/route.ts
2026-04-11 12:21:34 +02:00

30 lines
980 B
TypeScript

import { NextResponse } from "next/server";
import { requirePlatformRole } from "@/lib/session";
import { listTenantRequests, syncProvisioningStatuses } from "@/lib/db";
import { getTenant } from "@/lib/k8s";
/**
* GET /api/admin/requests
* List all tenant requests. Optionally filter by ?status=pending
* Auto-syncs "provisioning" → "active" when the PiecedTenant CR is Ready.
*/
export async function GET(request: Request) {
try {
await requirePlatformRole();
} catch {
return NextResponse.json({ error: "Forbidden" }, { status: 403 });
}
// Sync provisioning statuses before listing
await syncProvisioningStatuses(async (tenantName: string) => {
const tenant = await getTenant(tenantName);
return tenant?.status?.phase ?? null;
});
const { searchParams } = new URL(request.url);
const status = searchParams.get("status") as any;
const requests = await listTenantRequests(status || undefined);
return NextResponse.json(requests);
}