From 3b6d85a1cc3dd10be902eb62417c34485f23876c Mon Sep 17 00:00:00 2001 From: alma Date: Wed, 14 Jan 2026 13:38:38 +0100 Subject: [PATCH] Agenda logic refactor --- app/agenda/page.tsx | 115 ++++++++++++++++++++++++++------------------ 1 file changed, 69 insertions(+), 46 deletions(-) diff --git a/app/agenda/page.tsx b/app/agenda/page.tsx index 36f6920..38d6232 100644 --- a/app/agenda/page.tsx +++ b/app/agenda/page.tsx @@ -45,33 +45,71 @@ export default async function CalendarPage() { const userId = session.user.username || session.user.email || ''; // Get all calendars for the user - // First, get calendars without mission relation (in case Prisma Client not regenerated) - let calendars = await prisma.calendar.findMany({ - where: { - userId: session?.user?.id || '', - }, - include: { - events: { - orderBy: { - start: 'asc' + // Try to use mission relation if available, otherwise fetch separately + let calendars: any[]; + + try { + // Try to use the mission relation directly (works after migration and Prisma Client regeneration) + calendars = await prisma.calendar.findMany({ + where: { + userId: session?.user?.id || '', + }, + include: { + events: { + orderBy: { + start: 'asc' + } + }, + mission: { + include: { + missionUsers: true + } } } - } - }); + }); + } catch (error: any) { + // If mission relation doesn't exist yet (Prisma Client not regenerated), fetch without it + console.log('Mission relation not available, fetching calendars without mission relation'); + calendars = await prisma.calendar.findMany({ + where: { + userId: session?.user?.id || '', + }, + include: { + events: { + orderBy: { + start: 'asc' + } + } + } + }); - // Then, fetch mission data for calendars that have missionId - // This works whether or not the Prisma relation is available - const calendarsWithMission = await Promise.all( - calendars.map(async (cal) => { - // Try to get missionId from the calendar (using raw query if needed) - let missionId: string | null = null; - - try { - // Try to access missionId directly (will work after Prisma Client regeneration) - missionId = (cal as any).missionId; - } catch (e) { - // If missionId doesn't exist, check if calendar name indicates a mission - if (cal.name.startsWith('Mission:')) { + // Then fetch mission data separately for calendars that have missionId + const calendarsWithMission = await Promise.all( + calendars.map(async (cal) => { + // Check if calendar has missionId (from database even if Prisma Client doesn't know about it) + const missionId = (cal as any).missionId; + + if (missionId) { + try { + const mission = await prisma.mission.findUnique({ + where: { id: missionId }, + include: { + missionUsers: true + } + }); + + if (mission) { + return { + ...cal, + missionId: mission.id, + mission: mission + }; + } + } catch (error) { + console.log('Error fetching mission data:', error); + } + } else if (cal.name.startsWith('Mission:')) { + // Fallback: find mission by name if missionId not available const missionName = cal.name.replace('Mission: ', ''); const mission = await prisma.mission.findFirst({ where: { @@ -81,19 +119,6 @@ export default async function CalendarPage() { { missionUsers: { some: { userId: session.user.id } } } ] }, - select: { id: true } - }); - if (mission) { - missionId = mission.id; - } - } - } - - // If we have a missionId, fetch the full mission data - if (missionId) { - try { - const mission = await prisma.mission.findUnique({ - where: { id: missionId }, include: { missionUsers: true } @@ -106,16 +131,14 @@ export default async function CalendarPage() { mission: mission }; } - } catch (error) { - console.log('Error fetching mission data:', error); } - } - - return cal; - }) - ); - - calendars = calendarsWithMission as any; + + return cal; + }) + ); + + calendars = calendarsWithMission; + } // If no calendars exist, create default ones if (calendars.length === 0) {