Guías

Sincronizar resultados

Traer una campaña completa a tu base de datos sin duplicar filas al volver a correrlo.

  1. 1

    Recorré todas las páginas

    El listado responde con `total`, así que se sabe cuándo parar sin adivinar.

    javascript
    async 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. 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.

    javascript
    for (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 },
      );
    }