Guías

Sincronizar resultados

Trazer uma safra completa para o seu banco de dados sem duplicar linhas ao rodar de novo.

  1. 1

    Percorra todas as páginas

    A listagem responde com `total`, então você sabe quando parar sem adivinhar.

    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

    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.

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