import "server-only"; import { query, queryOne } from "@/lib/db"; import type { CodeItem } from "@/lib/types"; // "allergens"/"additives" sind identisch aufgebaute Tabellen (Kürzel + // Bezeichnung in DE/EN/PL). Tabellenname kommt nie aus Nutzereingaben, // sondern immer aus dem literal getypten Parameter unten – sicher für // String-Interpolation in der Query. export type CodeTable = "allergens" | "additives"; export async function listCodes(table: CodeTable): Promise { return query(`select * from ${table} order by sort`); } export async function createCode( table: CodeTable, input: { code: string; name: string; name_en: string | null; name_pl: string | null } ): Promise { const maxRow = await queryOne<{ sort: number }>( `select sort from ${table} order by sort desc limit 1` ); return (await queryOne( `insert into ${table} (code, name, name_en, name_pl, sort) values ($1, $2, $3, $4, $5) returning *`, [input.code, input.name, input.name_en, input.name_pl, (maxRow?.sort ?? 0) + 1] ))!; } export async function updateCode( table: CodeTable, originalCode: string, input: { code: string; name: string; name_en: string | null; name_pl: string | null } ): Promise { return queryOne( `update ${table} set code = $1, name = $2, name_en = $3, name_pl = $4 where code = $5 returning *`, [input.code, input.name, input.name_en, input.name_pl, originalCode] ); } export async function deleteCode(table: CodeTable, code: string): Promise { await query(`delete from ${table} where code = $1`, [code]); }