Fix workforce sync: split 35-day window into 7-day API chunks
Workforce schedules API enforces a hard 7-day limit per request. Split the rolling window into up to 5 weekly chunks, fetch each sequentially, then merge by staff id before pivoting to per-date rows. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
09a8158a1e
commit
69720b778a
1 changed files with 21 additions and 1 deletions
|
|
@ -35,7 +35,27 @@ export async function workforceRoutes(app) {
|
|||
const to = fmtDate(toDate)
|
||||
|
||||
try {
|
||||
const staffList = await fetchShifts(from, to, deptIds)
|
||||
// API limit: max 7 days per request — split window into weekly chunks
|
||||
const chunks = []
|
||||
const cur = new Date(fromDate)
|
||||
while (cur <= toDate) {
|
||||
const chunkFrom = fmtDate(cur)
|
||||
const chunkToDate = new Date(cur)
|
||||
chunkToDate.setDate(chunkToDate.getDate() + 6)
|
||||
if (chunkToDate > toDate) chunkToDate.setTime(toDate.getTime())
|
||||
chunks.push({ from: chunkFrom, to: fmtDate(chunkToDate) })
|
||||
cur.setDate(cur.getDate() + 7)
|
||||
}
|
||||
|
||||
const staffMap = {}
|
||||
for (const chunk of chunks) {
|
||||
const chunkStaff = await fetchShifts(chunk.from, chunk.to, deptIds)
|
||||
for (const member of chunkStaff) {
|
||||
if (!staffMap[member.id]) staffMap[member.id] = { id: member.id, name: member.name, days: {} }
|
||||
Object.assign(staffMap[member.id].days, member.days)
|
||||
}
|
||||
}
|
||||
const staffList = Object.values(staffMap)
|
||||
|
||||
// Pivot per-member → per-date
|
||||
const byDate = {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue