Add non-destructive dev seed on startup

This commit is contained in:
t.indorf
2026-05-06 22:31:07 +02:00
parent 9f452fccac
commit b686e714ff
77 changed files with 10862 additions and 87 deletions
+109
View File
@@ -0,0 +1,109 @@
"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 dutySchema = z.object({
name: z.string().min(2, "Name muss mindestens 2 Zeichen lang sein").max(50),
description: z.string().optional(),
});
export async function createDuty(rawPayload: unknown) {
const session = await requireRole([UserRole.ADMIN, UserRole.KOORDINATOR]);
const parsed = dutySchema.safeParse(rawPayload);
if (!parsed.success) {
return { error: "Ungültige Eingabedaten." };
}
try {
await prisma.parentDuty.create({
data: {
kitaId: session.user.kitaId!,
name: parsed.data.name,
description: parsed.data.description,
},
});
revalidatePath("/dashboard/families");
revalidatePath("/dashboard/adressbuch");
return { success: true };
} catch (error) {
console.error("Fehler beim Erstellen des Amtes:", error);
return { error: "Ein Fehler ist aufgetreten (evtl. existiert der Name bereits)." };
}
}
export async function deleteDuty(dutyId: string) {
const session = await requireRole([UserRole.ADMIN, UserRole.KOORDINATOR]);
try {
await prisma.parentDuty.delete({
where: {
id: dutyId,
kitaId: session.user.kitaId!,
},
});
revalidatePath("/dashboard/families");
revalidatePath("/dashboard/adressbuch");
return { success: true };
} catch (error) {
console.error("Fehler beim Löschen des Amtes:", error);
return { error: "Ein Fehler ist aufgetreten." };
}
}
export async function assignDuty(userId: string, dutyId: string) {
const session = await requireRole([UserRole.ADMIN, UserRole.KOORDINATOR]);
try {
// Check if assignment already exists
const existing = await prisma.parentDutyAssignment.findUnique({
where: {
dutyId_userId: { dutyId, userId },
},
});
if (existing) {
return { error: "Der Nutzer hat dieses Amt bereits." };
}
await prisma.parentDutyAssignment.create({
data: {
kitaId: session.user.kitaId!,
userId: userId,
dutyId: dutyId,
},
});
revalidatePath("/dashboard/families");
revalidatePath("/dashboard/adressbuch");
return { success: true };
} catch (error) {
console.error("Fehler beim Zuweisen des Amtes:", error);
return { error: "Ein Fehler ist aufgetreten." };
}
}
export async function removeDutyAssignment(assignmentId: string) {
const session = await requireRole([UserRole.ADMIN, UserRole.KOORDINATOR]);
try {
await prisma.parentDutyAssignment.delete({
where: {
id: assignmentId,
kitaId: session.user.kitaId!,
},
});
revalidatePath("/dashboard/families");
revalidatePath("/dashboard/adressbuch");
return { success: true };
} catch (error) {
console.error("Fehler beim Entfernen des Amtes:", error);
return { error: "Ein Fehler ist aufgetreten." };
}
}