"use server"; import { revalidatePath } from "next/cache"; import { z } from "@/lib/validierung"; import { GeraeteTyp } from "@/generated/prisma/enums"; import { RechteFehler, rechtErforderlich } from "@/server/auth/sitzungspflicht"; import { SchnellstartFehler, schnellstartSetzen } from "@/server/services/schnellstart"; /** Server Action für den Schnellstart (#022). Recht prüfen, Zod, Service rufen. */ export type AktionsErgebnis = { readonly fehler?: string; readonly erfolg?: string }; const Schema = z.object({ geraeteTyp: z.enum(GeraeteTyp), /** * Die ganze Liste in Anzeigereihenfolge, als ein Feld mit Zeilenumbrüchen. * * Eine leere Liste ist eine Angabe: „für diesen Typ gibt es keinen * Schnellstart“. Deshalb kein `min(1)`. */ vorlageIds: z.string(), }); export async function schnellstartSpeichernAktion( _vorher: AktionsErgebnis, formular: FormData, ): Promise { try { const { benutzer } = await rechtErforderlich("verwaltung"); const eingabe = Schema.safeParse({ geraeteTyp: formular.get("geraeteTyp"), vorlageIds: formular.get("vorlageIds") ?? "", }); if (!eingabe.success) return { fehler: "Die Eingabe ist unvollständig." }; const ids = eingabe.data.vorlageIds .split("\n") .map((zeile) => zeile.trim()) .filter((zeile) => zeile.length > 0); await schnellstartSetzen(eingabe.data.geraeteTyp, ids, benutzer.id); revalidatePath("/admin/schnellstart"); // Die Geräteseiten zeigen die Kacheln – ohne das bliebe dort der alte Stand. revalidatePath("/geraete", "layout"); return { erfolg: "Gespeichert." }; } catch (fehler) { if (fehler instanceof SchnellstartFehler) return { fehler: fehler.message }; if (fehler instanceof RechteFehler) { return { fehler: "Dafür fehlt dir die Berechtigung." }; } console.error( "Schnellstart speichern fehlgeschlagen:", fehler instanceof Error ? `${fehler.name}: ${fehler.message}` : "unbekannter Fehler", ); return { fehler: "Der Schnellstart konnte nicht gespeichert werden." }; } }