Agenda refactor

This commit is contained in:
alma 2026-01-15 13:15:12 +01:00
parent ecb7cd31ad
commit 0cdf3dd691
2 changed files with 97 additions and 2 deletions

View File

@ -45,8 +45,13 @@ export default async function CalendarPage() {
const userId = session.user.username || session.user.email || '';
// Get all calendars for the user with mission relation and sync configuration
// This includes:
// 1. Personal calendars (userId = session.user.id)
// 2. Mission calendars where user is associated via MissionUser
// Exclude "Privée" and "Default" calendars that are not synced (they should only exist if synced from courrier)
let calendars = await prisma.calendar.findMany({
// Get personal calendars
let personalCalendars = await prisma.calendar.findMany({
where: {
userId: session?.user?.id || '',
OR: [
@ -89,6 +94,54 @@ export default async function CalendarPage() {
}
}
});
// Get mission calendars where user is associated via MissionUser
const missionUserRelations = await prisma.missionUser.findMany({
where: {
userId: session?.user?.id || '',
},
include: {
mission: {
include: {
calendars: {
where: {
// Exclude calendars already owned by user (already in personalCalendars)
userId: { not: session?.user?.id || '' }
},
include: {
events: {
orderBy: {
start: 'asc'
}
},
mission: {
include: {
missionUsers: true
}
},
syncConfig: {
include: {
mailCredential: {
select: {
id: true,
email: true,
display_name: true,
}
}
}
}
}
}
}
}
}
});
// Extract mission calendars
const missionCalendars = missionUserRelations.flatMap(mu => mu.mission.calendars);
// Combine personal and mission calendars
let calendars = [...personalCalendars, ...missionCalendars];
// Auto-setup sync for email accounts from courrier (Microsoft only)
// Get all Microsoft email accounts (OAuth)

View File

@ -47,7 +47,9 @@ export async function GET(req: NextRequest) {
logger.debug('[CALENDAR] Fetching calendar data from database', {
userId: session.user.id,
});
const calendars = await prisma.calendar.findMany({
// Get user's personal calendars
const personalCalendars = await prisma.calendar.findMany({
where: {
userId: session.user.id,
},
@ -56,12 +58,52 @@ export async function GET(req: NextRequest) {
orderBy: {
start: 'asc'
}
},
mission: {
include: {
missionUsers: true
}
}
},
orderBy: {
createdAt: "desc",
},
});
// Get mission calendars where user is associated via MissionUser
const missionUserRelations = await prisma.missionUser.findMany({
where: {
userId: session.user.id,
},
include: {
mission: {
include: {
calendars: {
include: {
events: {
orderBy: {
start: 'asc'
}
},
mission: {
include: {
missionUsers: true
}
}
}
}
}
}
}
});
// Extract mission calendars (excluding those already in personalCalendars)
const missionCalendars = missionUserRelations
.flatMap(mu => mu.mission.calendars)
.filter(cal => cal.userId !== session.user.id); // Exclude calendars owned by user (already in personalCalendars)
// Combine personal and mission calendars
const calendars = [...personalCalendars, ...missionCalendars];
logger.debug('[CALENDAR] Fetched calendars with events', {
userId: session.user.id,