59 lines
2.1 KiB
TypeScript
59 lines
2.1 KiB
TypeScript
"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." };
|
||
}
|
||
}
|