Sincronizar resultados
Traer una campaña completa a tu base de datos sin duplicar filas al volver a correrlo.
- 1
Recorré todas las páginas
El listado responde con `total`, así que se sabe cuándo parar sin adivinar.
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
Hacé upsert por el id de Kaax
Así volver a correr la sincronización no duplica nada, que es lo que la vuelve segura de programar en un 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 }, ); }
