disclosure-bureau/web/app/api/graph/seed/route.ts

33 lines
1.1 KiB
TypeScript
Raw Normal View History

/**
* /api/graph/seed initial node set + internal edges for the force-directed graph view.
*
* GET /api/graph/seed?limit=80&min_weight=2&classes=person,organization
*/
import { NextRequest } from "next/server";
import { getGraphSeed } from "@/lib/retrieval/graph";
export const runtime = "nodejs";
export const dynamic = "force-dynamic";
function json(data: unknown, status = 200) {
return new Response(JSON.stringify(data), {
status,
headers: { "content-type": "application/json" },
});
}
export async function GET(req: NextRequest) {
const u = new URL(req.url);
const limit = Math.min(Number(u.searchParams.get("limit") ?? 80), 300);
const minWeight = Number(u.searchParams.get("min_weight") ?? 2);
const classesParam = u.searchParams.get("classes");
const classes = classesParam ? classesParam.split(",").filter(Boolean) : undefined;
try {
const { nodes, links } = await getGraphSeed({ limit, minWeight, classes });
return json({ nodes, links, total: nodes.length });
} catch (e) {
return json({ error: "graph_unavailable", message: (e as Error).message }, 503);
}
}