From 8e775ceca763511e9f040afb1d539bee1fecd51e Mon Sep 17 00:00:00 2001 From: alma Date: Thu, 15 Jan 2026 17:36:45 +0100 Subject: [PATCH] Agenda refactor --- app/api/calendars/route.ts | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/app/api/calendars/route.ts b/app/api/calendars/route.ts index 8021810..cc6298e 100644 --- a/app/api/calendars/route.ts +++ b/app/api/calendars/route.ts @@ -49,6 +49,7 @@ export async function GET(req: NextRequest) { }); // Get user's personal calendars + // Include syncConfig to filter "Privée"/"Default" calendars that don't have active sync const personalCalendars = await prisma.calendar.findMany({ where: { userId: session.user.id, @@ -63,6 +64,17 @@ export async function GET(req: NextRequest) { include: { missionUsers: true } + }, + syncConfig: { + include: { + mailCredential: { + select: { + id: true, + email: true, + display_name: true, + } + } + } } }, orderBy: { @@ -70,6 +82,25 @@ export async function GET(req: NextRequest) { }, }); + // Filter out "Privée"/"Default" calendars that don't have active sync + // This matches the logic in app/agenda/page.tsx + const filteredPersonalCalendars = personalCalendars.filter(cal => { + const isPrivateOrDefault = cal.name === "Privée" || cal.name === "Default"; + const hasActiveSync = cal.syncConfig?.syncEnabled === true && cal.syncConfig?.mailCredential; + + // Exclude "Privée"/"Default" calendars that are not actively synced + if (isPrivateOrDefault && !hasActiveSync) { + logger.debug('[CALENDAR] Filtering out calendar without active sync', { + calendarId: cal.id, + calendarName: cal.name, + syncEnabled: cal.syncConfig?.syncEnabled, + hasMailCredential: !!cal.syncConfig?.mailCredential, + }); + return false; + } + return true; + }); + // Get mission calendars where user is associated via MissionUser const missionUserRelations = await prisma.missionUser.findMany({ where: { @@ -99,13 +130,13 @@ export async function GET(req: NextRequest) { // Extract mission calendars (excluding those already in personalCalendars) // Use a Set to avoid duplicate calendars by ID - const personalCalendarIds = new Set(personalCalendars.map(cal => cal.id)); + const personalCalendarIds = new Set(filteredPersonalCalendars.map(cal => cal.id)); const missionCalendars = missionUserRelations .flatMap(mu => mu.mission.calendars) .filter(cal => !personalCalendarIds.has(cal.id)); // Exclude calendars already in personalCalendars // Combine personal and mission calendars - const calendars = [...personalCalendars, ...missionCalendars]; + const calendars = [...filteredPersonalCalendars, ...missionCalendars]; // Remove duplicate calendars by ID (in case same calendar appears multiple times) const uniqueCalendars = Array.from( @@ -114,9 +145,10 @@ export async function GET(req: NextRequest) { logger.debug('[CALENDAR] Fetched calendars with events', { userId: session.user.id, - personalCount: personalCalendars.length, + personalCount: filteredPersonalCalendars.length, missionCount: missionCalendars.length, totalCount: uniqueCalendars.length, + filteredOut: personalCalendars.length - filteredPersonalCalendars.length, }); // Cache the results