2024-11-09 19:06:54 +00:00
|
|
|
import { Metadata, Script } from "@/lib/types";
|
|
|
|
import { promises as fs } from "fs";
|
2024-11-04 22:55:08 +00:00
|
|
|
import { NextResponse } from "next/server";
|
2024-11-09 19:06:54 +00:00
|
|
|
import path from "path";
|
2024-11-04 22:55:08 +00:00
|
|
|
|
|
|
|
export const dynamic = "force-static";
|
|
|
|
|
2024-11-09 19:06:54 +00:00
|
|
|
const jsonDir = "public/json";
|
|
|
|
const metadataFileName = "metadata.json";
|
|
|
|
const encoding = "utf-8";
|
|
|
|
|
|
|
|
const getMetadata = async () => {
|
|
|
|
const filePath = path.resolve(jsonDir, metadataFileName);
|
|
|
|
const fileContent = await fs.readFile(filePath, encoding);
|
|
|
|
const metadata: Metadata = JSON.parse(fileContent);
|
|
|
|
return metadata;
|
2024-11-06 22:47:04 +00:00
|
|
|
};
|
|
|
|
|
2024-11-09 19:06:54 +00:00
|
|
|
const getScripts = async () => {
|
|
|
|
const filePaths = (await fs.readdir(jsonDir))
|
|
|
|
.filter((fileName) => fileName !== metadataFileName)
|
|
|
|
.map((fileName) => path.resolve(jsonDir, fileName));
|
|
|
|
|
2024-11-06 22:47:04 +00:00
|
|
|
const scripts = await Promise.all(
|
2024-11-09 19:06:54 +00:00
|
|
|
filePaths.map(async (filePath) => {
|
|
|
|
const fileContent = await fs.readFile(filePath, encoding);
|
|
|
|
const script: Script = JSON.parse(fileContent);
|
2024-11-06 22:47:04 +00:00
|
|
|
return script;
|
|
|
|
}),
|
|
|
|
);
|
|
|
|
return scripts;
|
|
|
|
};
|
|
|
|
|
2024-11-04 22:55:08 +00:00
|
|
|
export async function GET() {
|
|
|
|
try {
|
2024-11-09 19:06:54 +00:00
|
|
|
const metadata = await getMetadata();
|
|
|
|
const scripts = await getScripts();
|
|
|
|
|
|
|
|
const categories = metadata.categories
|
|
|
|
.map((category) => {
|
|
|
|
category.scripts = scripts.filter((script) =>
|
|
|
|
script.categories.includes(category.id),
|
|
|
|
);
|
|
|
|
return category;
|
|
|
|
})
|
|
|
|
.sort((a, b) => a.sort_order - b.sort_order);
|
|
|
|
|
2024-11-06 22:47:04 +00:00
|
|
|
return NextResponse.json(categories);
|
2024-11-04 22:55:08 +00:00
|
|
|
} catch (error) {
|
2024-11-06 22:47:04 +00:00
|
|
|
console.error(error as Error);
|
2024-11-04 22:55:08 +00:00
|
|
|
return NextResponse.json(
|
|
|
|
{ error: "Failed to fetch categories" },
|
|
|
|
{ status: 500 },
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|