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 || '';
|
const userId = session.user.username || session.user.email || '';
|
||||||
|
|
||||||
// Get all calendars for the user with mission relation and sync configuration
|
// 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)
|
// 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: {
|
where: {
|
||||||
userId: session?.user?.id || '',
|
userId: session?.user?.id || '',
|
||||||
OR: [
|
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)
|
// Auto-setup sync for email accounts from courrier (Microsoft only)
|
||||||
// Get all Microsoft email accounts (OAuth)
|
// Get all Microsoft email accounts (OAuth)
|
||||||
|
|||||||
@ -47,7 +47,9 @@ export async function GET(req: NextRequest) {
|
|||||||
logger.debug('[CALENDAR] Fetching calendar data from database', {
|
logger.debug('[CALENDAR] Fetching calendar data from database', {
|
||||||
userId: session.user.id,
|
userId: session.user.id,
|
||||||
});
|
});
|
||||||
const calendars = await prisma.calendar.findMany({
|
|
||||||
|
// Get user's personal calendars
|
||||||
|
const personalCalendars = await prisma.calendar.findMany({
|
||||||
where: {
|
where: {
|
||||||
userId: session.user.id,
|
userId: session.user.id,
|
||||||
},
|
},
|
||||||
@ -56,12 +58,52 @@ export async function GET(req: NextRequest) {
|
|||||||
orderBy: {
|
orderBy: {
|
||||||
start: 'asc'
|
start: 'asc'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
mission: {
|
||||||
|
include: {
|
||||||
|
missionUsers: true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
orderBy: {
|
orderBy: {
|
||||||
createdAt: "desc",
|
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', {
|
logger.debug('[CALENDAR] Fetched calendars with events', {
|
||||||
userId: session.user.id,
|
userId: session.user.id,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user