calendar 29

This commit is contained in:
Alma 2025-04-13 16:43:02 +02:00
parent 0a982dd218
commit d85df3e8ce
2 changed files with 45 additions and 27 deletions

View File

@ -9,37 +9,43 @@ export async function DELETE(
) { ) {
const session = await getServerSession(authOptions); const session = await getServerSession(authOptions);
if (!session?.user?.username) { if (!session?.user?.id) {
return NextResponse.json({ error: "Non authentifié" }, { status: 401 }); return NextResponse.json({ error: "Non authentifié" }, { status: 401 });
} }
try { try {
// Verify event ownership through calendar // First, find the event and its associated calendar
const event = await prisma.event.findFirst({ const event = await prisma.event.findUnique({
where: { where: { id: params.id },
id: params.id, include: { calendar: true },
},
include: {
calendar: true
}
}); });
if (!event || event.calendar.userId !== session.user.username) { if (!event) {
return NextResponse.json( return NextResponse.json(
{ error: "Événement non trouvé ou non autorisé" }, { error: "Événement non trouvé" },
{ status: 404 } { status: 404 }
); );
} }
// Verify that the user owns the calendar
if (event.calendar.userId !== session.user.id) {
return NextResponse.json(
{ error: "Non autorisé" },
{ status: 403 }
);
}
// Delete the event
await prisma.event.delete({ await prisma.event.delete({
where: { where: { id: params.id },
id: params.id,
},
}); });
return NextResponse.json({ success: true }); return new NextResponse(null, { status: 204 });
} catch (error) { } catch (error) {
console.error("Erreur lors de la suppression de l'événement:", error); console.error("Erreur lors de la suppression de l'événement:", error);
return NextResponse.json({ error: "Erreur serveur" }, { status: 500 }); return NextResponse.json(
{ error: "Erreur serveur" },
{ status: 500 }
);
} }
} }

View File

@ -495,7 +495,9 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
const response = await fetch("/api/calendars"); const response = await fetch("/api/calendars");
if (!response.ok) throw new Error("Failed to fetch calendars"); if (!response.ok) throw new Error("Failed to fetch calendars");
const data = await response.json(); const data = await response.json();
console.log("Fetched calendars with events:", data); console.log("Fetched calendars:", data);
let calendarsData = data;
// Create principal calendar if it doesn't exist // Create principal calendar if it doesn't exist
if (data.length === 0 || !data.some((cal: Calendar) => cal.name === "Calendrier principal")) { if (data.length === 0 || !data.some((cal: Calendar) => cal.name === "Calendrier principal")) {
@ -513,13 +515,23 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
}); });
if (principalCalendar.ok) { if (principalCalendar.ok) {
const newData = await principalCalendar.json(); const newCalendar = await principalCalendar.json();
data.push(newData); calendarsData = [newCalendar, ...data];
} }
} else {
// Remove any duplicate "Calendrier principal" and "Default" calendars
const seenPrincipal = false;
calendarsData = data.filter((cal: Calendar) => {
if (cal.name === "Calendrier principal") {
if (seenPrincipal) return false;
return true;
}
return cal.name !== "Default";
});
} }
// Ensure events array exists for each calendar and convert dates // Ensure events array exists for each calendar and convert dates
const calendarsWithEvents = data.map((cal: Calendar & { events: Event[] }) => ({ const calendarsWithEvents = calendarsData.map((cal: Calendar & { events: Event[] }) => ({
...cal, ...cal,
events: (cal.events || []).map(event => ({ events: (cal.events || []).map(event => ({
...event, ...event,
@ -531,16 +543,16 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
console.log("Setting calendars with processed events:", calendarsWithEvents); console.log("Setting calendars with processed events:", calendarsWithEvents);
setCalendars(calendarsWithEvents); setCalendars(calendarsWithEvents);
if (calendarsWithEvents.length > 0 && !selectedCalendarId) { // Set initial selected calendar
setSelectedCalendarId(calendarsWithEvents[0].id); if (calendarsWithEvents.length > 0) {
const principalCalendar = calendarsWithEvents.find(cal => cal.name === "Calendrier principal");
setSelectedCalendarId(principalCalendar?.id || calendarsWithEvents[0].id);
} }
// Update visible calendars if not set // Update visible calendars
if (visibleCalendarIds.length === 0) {
setVisibleCalendarIds(calendarsWithEvents.map(cal => cal.id)); setVisibleCalendarIds(calendarsWithEvents.map(cal => cal.id));
}
// Force calendar refresh after updating state // Force calendar refresh
if (calendarRef.current) { if (calendarRef.current) {
const calendarApi = calendarRef.current.getApi(); const calendarApi = calendarRef.current.getApi();
calendarApi.refetchEvents(); calendarApi.refetchEvents();