Files
2026-07-13 13:08:41 +08:00

54 lines
1.5 KiB
TypeScript

import { NextResponse } from "next/server";
import {
buildBuiltinTemplateLayoutPayload,
buildCustomTemplateLayoutPayloadFromApi,
} from "@/lib/server-template-layouts";
export const dynamic = "force-dynamic";
/**
* Server-only layout + JSON Schema for built-in templates (no import of
* `presentation-templates/index.tsx`, which would pull Recharts into RSC).
*
* Used by FastAPI when `extract-schema` (Puppeteer) fails — e.g. `next dev`
* + `networkidle0`.
*/
export async function GET(request: Request) {
const group = new URL(request.url).searchParams.get("group");
if (!group) {
return NextResponse.json(
{ error: "Missing required query parameter: group" },
{ status: 400 },
);
}
try {
if (group.startsWith("custom-")) {
const customPayload = await buildCustomTemplateLayoutPayloadFromApi(group);
if (!customPayload) {
return NextResponse.json(
{ error: `Unknown template group: ${group}` },
{ status: 404 },
);
}
return NextResponse.json(customPayload);
}
const payload = await buildBuiltinTemplateLayoutPayload(group);
if (!payload) {
return NextResponse.json(
{ error: `Unknown template group: ${group}` },
{ status: 404 },
);
}
return NextResponse.json(payload);
} catch (err) {
console.error("[api/template] failed to build layout payload", err);
return NextResponse.json(
{ error: "Failed to compile template layouts" },
{ status: 500 },
);
}
}