Agenda logic refactor

This commit is contained in:
alma 2026-01-14 13:38:38 +01:00
parent 2d35863f02
commit 3b6d85a1cc

View File

@ -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) {