feat(schnellstart): Kacheln je Geraetetyp in der Oberflaeche pflegen (#44)
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s

This commit was merged in pull request #44.
This commit is contained in:
2026-10-04 15:41:47 +00:00
parent 0060a55387
commit f5936327a0
17 changed files with 910 additions and 24 deletions
+58
View File
@@ -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." };
}
}