feat: complete notdienst planning, quick wins and notifications

This commit is contained in:
t.indorf
2026-10-12 15:34:09 +02:00
parent b915857951
commit 00f602a7aa
50 changed files with 2443 additions and 513 deletions
+15 -14
View File
@@ -12,6 +12,8 @@ import {
} from "@/lib/child-birthdate";
import { serializableTransaction } from "@/lib/transaction";
import { prisma } from "@/lib/prisma";
import { assertChildrenRemovable } from "@/lib/notdienst-planning";
import { UserFacingError, publicActionError } from "@/lib/action-error";
// Telefonnummern: führendes "+" optional, dann Ziffern, Leerzeichen, Bindestriche,
// Klammern oder Schrägstriche. Mindestens 6 Ziffern damit es plausibel ist.
@@ -268,26 +270,25 @@ export async function deleteMyChild(childId: string) {
const session = await requireKitaSession();
try {
const child = await requireOwnFamilyChild(
childId,
session.user.familyId,
session.user.kitaId,
);
if (!child) {
return { error: "Dieses Kind gehört nicht zu deinem Haushalt." };
}
await prisma.child.delete({
where: { id: childId, kitaId: session.user.kitaId, familyId: session.user.familyId! },
await serializableTransaction(async (tx) => {
if (!session.user.familyId) throw new UserFacingError("Dieses Kind gehört nicht zu deinem Haushalt.");
const child = await tx.child.findFirst({
where: { id: childId, kitaId: session.user.kitaId, familyId: session.user.familyId },
select: { id: true },
});
if (!child) throw new UserFacingError("Dieses Kind gehört nicht zu deinem Haushalt.");
await assertChildrenRemovable(tx, session.user.kitaId, session.user.familyId, [childId]);
await tx.child.delete({
where: { id: childId, kitaId: session.user.kitaId, familyId: session.user.familyId },
});
});
revalidatePath("/dashboard/profil");
revalidatePath("/dashboard/families");
return { success: true };
} catch (error) {
console.error("Fehler beim Entfernen des Kindes:", error);
return { error: "Das Kind konnte nicht entfernt werden." };
if (!(error instanceof UserFacingError)) console.error("Fehler beim Entfernen des Kindes:", error);
return { error: publicActionError(error, "Das Kind konnte nicht entfernt werden.") };
}
}