Agenda refactor

This commit is contained in:
alma 2026-01-14 17:29:00 +01:00
parent c549e34c8e
commit ed580b8cc2

View File

@ -181,7 +181,7 @@ export default async function CalendarPage() {
for (const account of infomaniakAccounts) {
// Check if a calendar sync already exists for this account (enabled or disabled)
// This prevents creating duplicate calendars for the same account
const existingSync = await prisma.calendarSync.findFirst({
let existingSync = await prisma.calendarSync.findFirst({
where: {
mailCredentialId: account.id
},
@ -189,6 +189,48 @@ export default async function CalendarPage() {
calendar: true
}
});
// If no sync found by mailCredentialId, check if there's an orphaned sync with same email
// This handles the case where user deleted and re-added the account (new mailCredentialId, same email)
if (!existingSync) {
const orphanedSyncByEmail = await prisma.calendarSync.findFirst({
where: {
provider: 'infomaniak',
calendar: {
userId: session?.user?.id || '',
name: 'Privée'
},
mailCredential: {
email: account.email
}
},
include: {
calendar: true,
mailCredential: true
}
});
if (orphanedSyncByEmail && orphanedSyncByEmail.mailCredential?.email === account.email) {
console.log(`[AGENDA] Found orphaned Infomaniak sync for email ${account.email}, reassigning to new mailCredentialId ${account.id}`);
// Reassign the sync to the new mailCredentialId
await prisma.calendarSync.update({
where: { id: orphanedSyncByEmail.id },
data: {
mailCredentialId: account.id,
syncEnabled: true
}
});
// Reload the sync
existingSync = await prisma.calendarSync.findFirst({
where: {
mailCredentialId: account.id
},
include: {
calendar: true
}
});
}
}
// If sync exists but is disabled, check if it's due to invalid credentials
// Don't re-enable if the last error was 401 (invalid credentials)
@ -567,6 +609,7 @@ export default async function CalendarPage() {
// No default calendar creation - only synced calendars from courrier
// Debug: Verify Infomaniak calendars exist in database
// Check both by provider and by mailCredential email
const allInfomaniakSyncs = await prisma.calendarSync.findMany({
where: {
provider: 'infomaniak',
@ -579,9 +622,30 @@ export default async function CalendarPage() {
mailCredential: true
}
});
console.log(`[AGENDA] Found ${allInfomaniakSyncs.length} Infomaniak syncs in database`);
allInfomaniakSyncs.forEach(sync => {
console.log(`[AGENDA] Infomaniak sync: id=${sync.id}, calendarId=${sync.calendarId}, calendarName=${sync.calendar?.name}, syncEnabled=${sync.syncEnabled}, mailCredentialId=${sync.mailCredentialId}, hasMailCredential=${!!sync.mailCredential}`);
// Also check for syncs linked to Infomaniak accounts by email (in case mailCredentialId changed)
const infomaniakEmails = infomaniakAccounts.map(acc => acc.email);
const syncsByEmail = await prisma.calendarSync.findMany({
where: {
provider: 'infomaniak',
calendar: {
userId: session?.user?.id || ''
},
mailCredential: {
email: {
in: infomaniakEmails
}
}
},
include: {
calendar: true,
mailCredential: true
}
});
console.log(`[AGENDA] Found ${allInfomaniakSyncs.length} Infomaniak syncs by provider, ${syncsByEmail.length} by email`);
[...allInfomaniakSyncs, ...syncsByEmail].forEach(sync => {
console.log(`[AGENDA] Infomaniak sync: id=${sync.id}, calendarId=${sync.calendarId}, calendarName=${sync.calendar?.name}, syncEnabled=${sync.syncEnabled}, mailCredentialId=${sync.mailCredentialId}, email=${sync.mailCredential?.email || 'none'}, hasMailCredential=${!!sync.mailCredential}`);
});
// Debug: Log calendars before filtering