From 4d6e53a1f823a4407311ba4a51d975b179e4ac70 Mon Sep 17 00:00:00 2001 From: jtricerolph Date: Thu, 23 Jul 2026 09:18:15 +0000 Subject: [PATCH] Fix rolling sync: batch actuals in 7-day chunks (API limit 31 days) --- backend/src/lib/workforce.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/backend/src/lib/workforce.js b/backend/src/lib/workforce.js index 8319675..a92fe8e 100644 --- a/backend/src/lib/workforce.js +++ b/backend/src/lib/workforce.js @@ -177,20 +177,30 @@ export async function syncScheduled(from, to) { } export async function runRollingSync() { - const today = new Date() - const to = today.toISOString().slice(0, 10) - const fromDate = new Date(today) - fromDate.setDate(fromDate.getDate() - 35) - const from = fromDate.toISOString().slice(0, 10) + const today = new Date() + const todayStr = today.toISOString().slice(0, 10) + // Actuals: 35 days back in 7-day batches (API limit is 31 days per request) + const startDate = new Date(today) + startDate.setDate(startDate.getDate() - 35) + let actualRows = 0 + let current = new Date(startDate) + while (current <= today) { + const batchEnd = new Date(current) + batchEnd.setDate(batchEnd.getDate() + 6) + if (batchEnd > today) batchEnd.setTime(today.getTime()) + actualRows += await syncActuals( + current.toISOString().slice(0, 10), + batchEnd.toISOString().slice(0, 10) + ) + current.setDate(current.getDate() + 7) + } + + // Scheduled: next 14 days (well within 31-day limit) const fwdDate = new Date(today) fwdDate.setDate(fwdDate.getDate() + 14) - const fwd = fwdDate.toISOString().slice(0, 10) + const scheduledRows = await syncScheduled(todayStr, fwdDate.toISOString().slice(0, 10)) - const [actualRows, scheduledRows] = await Promise.all([ - syncActuals(from, to), - syncScheduled(to, fwd), - ]) return { actualRows, scheduledRows } }