Files
Laufzettel/src/server/actions/schnellstart.ts
T
florian.wilde f5936327a0
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s
feat(schnellstart): Kacheln je Geraetetyp in der Oberflaeche pflegen (#44)
2026-10-04 15:41:47 +00:00

59 lines
2.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"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<AktionsErgebnis> {
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." };
}
}