Fix live test follow-up issues
This commit is contained in:
@@ -15,11 +15,23 @@ import { getTargetMonthData } from "@/lib/date-utils";
|
||||
// Die Termine werden Round-Robin auf die Kinder aufgeteilt.
|
||||
// =====================================================================
|
||||
|
||||
const dateKeyPattern = /^\d{4}-\d{2}-\d{2}$/;
|
||||
|
||||
const payloadSchema = z.object({
|
||||
childrenIds: z.array(z.string()).min(1),
|
||||
dates: z.array(z.string().datetime()), // ISO strings
|
||||
dates: z.array(
|
||||
z.string().regex(dateKeyPattern).refine((value) => {
|
||||
const date = dateKeyToUtcDate(value);
|
||||
return value === date.toISOString().slice(0, 10);
|
||||
}),
|
||||
),
|
||||
});
|
||||
|
||||
function dateKeyToUtcDate(dateKey: string) {
|
||||
const [year, month, day] = dateKey.split("-").map(Number);
|
||||
return new Date(Date.UTC(year, month - 1, day));
|
||||
}
|
||||
|
||||
export async function saveNotdienstAvailabilities(payloadRaw: {
|
||||
childrenIds: string[];
|
||||
dates: string[];
|
||||
@@ -35,7 +47,8 @@ export async function saveNotdienstAvailabilities(payloadRaw: {
|
||||
return { error: "Ungültige Eingabedaten." };
|
||||
}
|
||||
|
||||
const { childrenIds, dates } = parsed.data;
|
||||
const { childrenIds } = parsed.data;
|
||||
const dates = Array.from(new Set(parsed.data.dates)).sort();
|
||||
|
||||
// ── 1. Sperrfrist prüfen ───────────────────────────────────────────
|
||||
const { targetYear, targetMonth, isLocked } = getTargetMonthData();
|
||||
@@ -79,9 +92,15 @@ export async function saveNotdienstAvailabilities(payloadRaw: {
|
||||
}
|
||||
|
||||
// Termine in Date-Objekte wandeln und sortieren
|
||||
const parsedDates = dates
|
||||
.map((d) => new Date(d))
|
||||
.sort((a, b) => a.getTime() - b.getTime());
|
||||
const parsedDates = dates.map(dateKeyToUtcDate);
|
||||
const hasOutsideTargetMonth = parsedDates.some(
|
||||
(date) =>
|
||||
date.getUTCFullYear() !== targetYear ||
|
||||
date.getUTCMonth() !== targetMonth - 1,
|
||||
);
|
||||
if (hasOutsideTargetMonth) {
|
||||
return { error: "Bitte wähle Termine im Zielmonat aus." };
|
||||
}
|
||||
|
||||
// Round-Robin Zuweisung
|
||||
const inserts: {
|
||||
@@ -110,8 +129,8 @@ export async function saveNotdienstAvailabilities(payloadRaw: {
|
||||
kitaId,
|
||||
childId: { in: childrenIds },
|
||||
date: {
|
||||
gte: new Date(targetYear, targetMonth - 1, 1),
|
||||
lt: new Date(targetYear, targetMonth, 1),
|
||||
gte: new Date(Date.UTC(targetYear, targetMonth - 1, 1)),
|
||||
lt: new Date(Date.UTC(targetYear, targetMonth, 1)),
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -126,7 +145,7 @@ export async function saveNotdienstAvailabilities(payloadRaw: {
|
||||
});
|
||||
|
||||
revalidatePath("/dashboard/notdienst");
|
||||
return { success: true };
|
||||
return { success: true, dates };
|
||||
} catch (error) {
|
||||
console.error("Fehler beim Speichern der Notdienste:", error);
|
||||
return { error: "Ein Fehler ist aufgetreten beim Speichern der Termine." };
|
||||
|
||||
Reference in New Issue
Block a user