Agenda refactor
This commit is contained in:
parent
82ad5f2f76
commit
8e775ceca7
@ -49,6 +49,7 @@ export async function GET(req: NextRequest) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Get user's personal calendars
|
// 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({
|
const personalCalendars = await prisma.calendar.findMany({
|
||||||
where: {
|
where: {
|
||||||
userId: session.user.id,
|
userId: session.user.id,
|
||||||
@ -63,6 +64,17 @@ export async function GET(req: NextRequest) {
|
|||||||
include: {
|
include: {
|
||||||
missionUsers: true
|
missionUsers: true
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
syncConfig: {
|
||||||
|
include: {
|
||||||
|
mailCredential: {
|
||||||
|
select: {
|
||||||
|
id: true,
|
||||||
|
email: true,
|
||||||
|
display_name: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
orderBy: {
|
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
|
// Get mission calendars where user is associated via MissionUser
|
||||||
const missionUserRelations = await prisma.missionUser.findMany({
|
const missionUserRelations = await prisma.missionUser.findMany({
|
||||||
where: {
|
where: {
|
||||||
@ -99,13 +130,13 @@ export async function GET(req: NextRequest) {
|
|||||||
|
|
||||||
// Extract mission calendars (excluding those already in personalCalendars)
|
// Extract mission calendars (excluding those already in personalCalendars)
|
||||||
// Use a Set to avoid duplicate calendars by ID
|
// 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
|
const missionCalendars = missionUserRelations
|
||||||
.flatMap(mu => mu.mission.calendars)
|
.flatMap(mu => mu.mission.calendars)
|
||||||
.filter(cal => !personalCalendarIds.has(cal.id)); // Exclude calendars already in personalCalendars
|
.filter(cal => !personalCalendarIds.has(cal.id)); // Exclude calendars already in personalCalendars
|
||||||
|
|
||||||
// Combine personal and mission calendars
|
// 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)
|
// Remove duplicate calendars by ID (in case same calendar appears multiple times)
|
||||||
const uniqueCalendars = Array.from(
|
const uniqueCalendars = Array.from(
|
||||||
@ -114,9 +145,10 @@ export async function GET(req: NextRequest) {
|
|||||||
|
|
||||||
logger.debug('[CALENDAR] Fetched calendars with events', {
|
logger.debug('[CALENDAR] Fetched calendars with events', {
|
||||||
userId: session.user.id,
|
userId: session.user.id,
|
||||||
personalCount: personalCalendars.length,
|
personalCount: filteredPersonalCalendars.length,
|
||||||
missionCount: missionCalendars.length,
|
missionCount: missionCalendars.length,
|
||||||
totalCount: uniqueCalendars.length,
|
totalCount: uniqueCalendars.length,
|
||||||
|
filteredOut: personalCalendars.length - filteredPersonalCalendars.length,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Cache the results
|
// Cache the results
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user