Agenda refactor
This commit is contained in:
parent
ecb7cd31ad
commit
0cdf3dd691
@ -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)
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user