feat: Abfüllungs-Archiv und Social-Media-Links auf der Herkunftsseite

Abfüllungen hatten keine Übersichtsseite - die Navigation ging direkt
auf /bottling/new, sodass eine angelegte Abfüllung danach nirgends
mehr sichtbar war. Neue Seite /bottling listet alle Abfüllungen
(Archiv), Klick führt zur bestehenden Detail-/Bearbeiten-Seite.
Navigationslink zeigt jetzt auf die Liste statt direkt auf "Neu".

Neues Modul site-settings (Singleton-Tabelle SiteSettings) für
YouTube-/Instagram-/TikTok-Links, verwaltbar unter Verwaltung > Website
(neue Berechtigung site-settings:read/update). Die öffentliche
Herkunftsseite (/herkunft/[lot]) zeigt die konfigurierten Links jetzt
zusätzlich zur Chargen-Herkunft an - PublicService liefert sie über
das bereits oeffentliche /public/batches/:lotNumber mit aus, keine
zusaetzliche unauthentifizierte Route noetig.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Sonnet 5 committed 2026-09-02 19:57:29 +02:00
1 parent 33fa768062
commit 351f9ef34c
19 files changed
+612 -4

No files matched your search

@@ -3,6 +3,12 @@ export interface PublicApiaryOrigin {
location: string | null;
}
export interface PublicSocialLinks {
youtube: string | null;
instagram: string | null;
tiktok: string | null;
}
export interface PublicBatch {
lotNumber: string;
productName: string | null;
@@ -15,4 +21,5 @@ export interface PublicBatch {
extractedDate: string | null;
harvestDates: string[];
apiaries: PublicApiaryOrigin[];
socialLinks: PublicSocialLinks;
}
@@ -0,0 +1,13 @@
import { apiFetch } from "@/lib/auth/api-client";
import { SiteSettings, UpdateSiteSettingsInput } from "./types";
export function fetchSiteSettings(): Promise<SiteSettings> {
return apiFetch<SiteSettings>("/site-settings");
}
export function updateSiteSettings(input: UpdateSiteSettingsInput): Promise<SiteSettings> {
return apiFetch<SiteSettings>("/site-settings", {
method: "PATCH",
body: JSON.stringify(input),
});
}
@@ -0,0 +1,13 @@
export interface SiteSettings {
id: string;
youtubeUrl: string | null;
instagramUrl: string | null;
tiktokUrl: string | null;
updatedAt: string;
}
export interface UpdateSiteSettingsInput {
youtubeUrl?: string;
instagramUrl?: string;
tiktokUrl?: string;
}