Agenda refactor

This commit is contained in:
alma 2026-01-15 17:36:45 +01:00
parent 82ad5f2f76
commit 8e775ceca7

View File

@ -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