"use server"; import { revalidatePath } from "next/cache"; import { UserRole } from "@prisma/client"; import { z } from "zod"; import { requireRole } from "@/lib/auth-utils"; import { prisma } from "@/lib/prisma"; const educatorSchema = z.object({ firstName: z.string().min(1, "Vorname ist erforderlich").max(100).trim(), lastName: z.string().min(1, "Nachname ist erforderlich").max(100).trim(), active: z.boolean().default(true), }); export async function createEducator(rawPayload: unknown) { const session = await requireRole([UserRole.ADMIN]); const kitaId = session.user.kitaId; if (!kitaId) { return { error: "Kein Mandant zugeordnet." }; } const parsed = educatorSchema.safeParse(rawPayload); if (!parsed.success) { return { error: "Ungültige Eingabedaten." }; } try { await prisma.educator.create({ data: { kitaId, firstName: parsed.data.firstName, lastName: parsed.data.lastName, active: parsed.data.active, }, }); revalidatePath("/dashboard/erzieher"); return { success: true }; } catch (error) { console.error("Fehler beim Anlegen:", error); return { error: "Ein Fehler ist aufgetreten." }; } } export async function updateEducator(id: string, rawPayload: unknown) { const session = await requireRole([UserRole.ADMIN]); const kitaId = session.user.kitaId; if (!kitaId) { return { error: "Kein Mandant zugeordnet." }; } const parsed = educatorSchema.safeParse(rawPayload); if (!parsed.success) { return { error: "Ungültige Eingabedaten." }; } try { await prisma.educator.update({ where: { id, kitaId, }, data: { firstName: parsed.data.firstName, lastName: parsed.data.lastName, active: parsed.data.active, }, }); revalidatePath("/dashboard/erzieher"); return { success: true }; } catch (error) { console.error("Fehler beim Aktualisieren:", error); return { error: "Ein Fehler ist aufgetreten." }; } } export async function deleteEducator(id: string) { const session = await requireRole([UserRole.ADMIN]); const kitaId = session.user.kitaId; if (!kitaId) { return { error: "Kein Mandant zugeordnet." }; } try { const profile = await prisma.staffProfile.findFirst({ where: { educatorId: id, kitaId }, }); if (profile) return { error: "Diese Fachkraft hat ein Personalprofil. Bitte auf inaktiv setzen, damit Zeiten und Konten erhalten bleiben.", }; await prisma.educator.delete({ where: { id, kitaId, }, }); revalidatePath("/dashboard/erzieher"); return { success: true }; } catch (error) { console.error("Fehler beim Löschen:", error); return { error: "Ein Fehler ist aufgetreten." }; } }