Sincronizar resultados
Trazer uma safra completa para o seu banco de dados sem duplicar linhas ao rodar de novo.
- 1
Percorra todas as páginas
A listagem responde com `total`, então você sabe quando parar sem adivinhar.
javascriptasync function fetchAllPages(path) { const out = []; let page = 1; for (;;) { const url = new URL(`https://www.kaax-agritech.com${path}`); url.searchParams.set("page", String(page)); url.searchParams.set("limit", "100"); const res = await fetch(url, { headers: { apiKey: process.env.KAAX_API_KEY }, }); if (!res.ok) throw new Error(`Kaax API ${res.status}: ${await res.text()}`); const { total, data } = await res.json(); out.push(...data); if (out.length >= total || data.length === 0) return out; page += 1; } } - 2
Faça upsert pelo id da Kaax
Assim rodar a sincronização de novo não duplica nada, o que a torna segura para colocar em um cron.
javascriptfor (const a of await fetchAllPages("/api/v2/analyses?type=counting")) { await db.analyses.updateOne( { kaaxId: a._id }, { $set: { ...a.analysis, name: a.name, syncedAt: new Date() } }, { upsert: true }, ); }
