diff --git a/src/pages/[roadmapId].json.ts b/src/pages/[roadmapId].json.ts index 5ff080fba..56a9cc507 100644 --- a/src/pages/[roadmapId].json.ts +++ b/src/pages/[roadmapId].json.ts @@ -1,36 +1,32 @@ import type { APIRoute } from 'astro'; -export const prerender = false; +export const prerender = true; + +export async function getStaticPaths() { + const roadmapJsons = import.meta.glob('/src/data/roadmaps/**/*.json', { + eager: true, + }); + + return Object.keys(roadmapJsons).map((filePath) => { + const roadmapId = filePath.split('/').pop()?.replace('.json', ''); + const roadmapJson = roadmapJsons[filePath] as Record; + + return { + params: { + roadmapId, + }, + props: { + roadmapJson: roadmapJson?.default, + }, + }; + }); +} export const GET: APIRoute = async function ({ params, request, props }) { - const roadmapId = params.roadmapId; - - const roadmapUrl = `${import.meta.env.PUBLIC_API_URL}/v1-official-roadmap/${roadmapId}`; - - const res = await fetch(roadmapUrl); - const roadmapJson = await res.json(); - - if (res.status !== 200) { - return new Response( - JSON.stringify({ - error: roadmapJson.error, - }), - { - status: 500, - }, - ); - } - - return new Response( - JSON.stringify({ - nodes: roadmapJson?.nodes, - edges: roadmapJson?.edges, - }), - { - status: 200, - headers: { - 'Content-Type': 'application/json', - }, + return new Response(JSON.stringify(props.roadmapJson), { + status: 200, + headers: { + 'Content-Type': 'application/json', }, - ); + }); };