Gerichtnamen, Essenszeiten und Allergen-/Zusatzstoff-Bezeichnungen sind jetzt genauso dynamisch mehrsprachig wie die Bedienoberfläche aus v1.10.0, statt fest auf Englisch/Polnisch begrenzt zu sein. Neue Übersetzungstabellen ersetzen die alten name_en/name_pl-Spalten, DeepL-Auto-Übersetzung und CSV-Import/-Export unterstützen jetzt beliebig viele aktive Sprachen.
30 lines
967 B
TypeScript
30 lines
967 B
TypeScript
import { listCodes } from "@/lib/db/code-lists";
|
|
import { listActiveLanguageCodes } from "@/lib/db/languages";
|
|
import { authErrorResponse, requireRole } from "@/lib/auth/session";
|
|
import { toCsv } from "@/lib/csv";
|
|
|
|
export async function GET() {
|
|
try {
|
|
await requireRole(["staff", "admin"]);
|
|
const [items, activeCodes] = await Promise.all([
|
|
listCodes("additives"),
|
|
listActiveLanguageCodes(),
|
|
]);
|
|
const langCodes = activeCodes.filter((c) => c !== "de");
|
|
const rows = [
|
|
["code", "name", ...langCodes.map((c) => `name_${c}`)],
|
|
...items.map((i) => [i.code, i.name, ...langCodes.map((c) => i.translations[c] ?? "")]),
|
|
];
|
|
return new Response(toCsv(rows), {
|
|
headers: {
|
|
"Content-Type": "text/csv; charset=utf-8",
|
|
"Content-Disposition": 'attachment; filename="zusatzstoffe.csv"',
|
|
},
|
|
});
|
|
} catch (err) {
|
|
const res = authErrorResponse(err);
|
|
if (res) return res;
|
|
throw err;
|
|
}
|
|
}
|