2025SELab2-project-Dwengo/backend/src/controllers/themes.ts
2025-02-26 18:51:27 +01:00

58 lines
1.9 KiB
TypeScript

import fs from "fs";
import path from "path";
import yaml from "js-yaml";
import { Request, Response } from "express";
import { themes } from "../data/themes.js";
interface Translations {
curricula_page: {
[key: string]: { title: string; description?: string }; // Optioneel veld description
};
}
/**
* Laadt de vertalingen uit een YAML-bestand
*/
function loadTranslations(language: string): Translations {
try {
const filePath = path.join(process.cwd(), "_i18n", `${language}.yml`);
const yamlFile = fs.readFileSync(filePath, "utf8");
return yaml.load(yamlFile) as Translations;
} catch (error) {
console.error(`Kan vertaling niet laden voor ${language}, fallback naar Nederlands`);
console.error(error);
const fallbackPath = path.join(process.cwd(), "_i18n", "nl.yml");
return yaml.load(fs.readFileSync(fallbackPath, "utf8")) as Translations;
}
}
/**
* GET /themes → Haalt de lijst met thema's op inclusief vertalingen
*/
export function getThemes(req: Request, res: Response){
const language = (req.query.language as string)?.toLowerCase() || "nl";
const translations = loadTranslations(language);
const themeList = themes.map((theme) => {return {
key: theme.title,
title: translations.curricula_page[theme.title]?.title || theme.title,
description: translations.curricula_page[theme.title]?.description,
image: `https://dwengo.org/images/curricula/logo_${theme.title}.png`
}});
res.json(themeList);
};
/**
* GET /themes/:theme → Geeft de HRUIDs terug voor een specifiek thema
*/
export function getThemeByTitle(req: Request, res: Response) {
const themeKey = req.params.theme;
const theme = themes.find((t) => {return t.title === themeKey});
if (theme) {
res.json(theme.hruids);
} else {
res.status(404).json({ error: "Thema niet gevonden" });
}
};