feat(schnellstart): Kacheln je Geraetetyp in der Oberflaeche pflegen (#44)
This commit was merged in pull request #44.
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
"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." };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user