lumnik. / scénarios Tous les scénarios · English

Une commande modifiée pendant la lecture n'est pas perdue

Objectif Ne lire chaque nuit que ce qui a changé, sans perdre ce qui change pendant la lecture.

Une API de commandes sait répondre à « ce qui a changé depuis telle date ». lumnik la lit en entier une fois, puis chaque nuit seulement ce qui a bougé.

manifests/10-orders.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: scenario-incremental-b  connector_type: rest-generic  scopes: [sales]spec:  base_url: http://host.docker.internal:8096  endpoints:    - id: orders      path: /api/orders      method: GET      pagination:        kind: offset        offset_param: offset        limit_param: limit        limit: 50        response_path: "$.data"      incremental:        mode: watermark        param: updated_since        watermark_path: "$.updated_at"      target:        kind: hybrid        table: ext.incremental_orders_b        unique_key: "$.id"        promote:          - { name: customer, path: "$.customer", type: text }          - { name: status, path: "$.status", type: text }          - { name: amount, path: "$.amount", type: decimal }          - { name: updated_at, path: "$.updated_at", type: timestamptz }
$ lm connector run scenario-incremental-b
run scheduled: 2917bdc6-1521-488a-867a-c534c044031c

$ lm run get 2917bdc6-1521-488a-867a-c534c044031c
ID        CONNECTOR               ENDPOINT  STATUS     IN  OUT  SKIPPED  DEAD-LETTERS  STARTED           ENDED
2917bdc6  scenario-incremental-b  orders    Completed  2   2    0        0             2026-11-03 17:08  2026-11-03 17:08
$ lm connector run scenario-incremental-b
run scheduled: ac6d8527-718f-4375-90a9-f9238bcc0190

$ lm run get ac6d8527-718f-4375-90a9-f9238bcc0190
ID        CONNECTOR               ENDPOINT  STATUS     IN   OUT  SKIPPED  DEAD-LETTERS  STARTED           ENDED
ac6d8527  scenario-incremental-b  orders    Completed  122  122  0        0             2026-11-03 17:08  2026-11-03 17:08
$ lm connector run scenario-incremental-b
run scheduled: 5cb57a7d-542f-4579-913c-0e7ea7700f49

$ lm run get 5cb57a7d-542f-4579-913c-0e7ea7700f49
ID        CONNECTOR               ENDPOINT  STATUS     IN   OUT  SKIPPED  DEAD-LETTERS  STARTED           ENDED
5cb57a7d  scenario-incremental-b  orders    Completed  120  120  0        0             2026-11-03 17:08  2026-11-03 17:08

Limites

  • La marge relit les commandes modifiées dans cet intervalle ; elles sont mises à jour, pas dupliquées.
  • Fonctionne quand updated_at porte un fuseau horaire ; un numéro de version ou une date seule est envoyé tel quel.
  • API simulée, commandes synthétiques.

Ventes · API de commandes

L'API dit ce qui a changé.

Chaque nuit, seulement ça.

300 commandes, API simulée

Le problème

Une commande change pendant la lecture.

  • Déjà lue, elle bouge encore.
  • La marque suivante passe après.

Ce qui n'est pas modifié

L'API reste telle quelle.

  • Son paramètre updated_since.
  • Aucun déclencheur à ajouter.

Le piège

Un changement entre deux nuits.

  • Trop tard pour ce run.
  • Trop tôt pour le suivant.

Ce qu'il a fallu écrire

incremental: { mode: watermark }

Une ligne.

  • La marque reculée d'une marge.
  • Ce qui est relu est mis à jour.
  • Un manifeste, 31 lignes.

Le résultat

SO-00101 arrive invoiced.

  • Au run suivant.
  • Sans doublon.

La limite

Il faut une date avec fuseau.

  • Un numéro de version est envoyé tel quel.

Essayer

Le scénario se rejoue en local.

Chaque étape est publiée avec sa sortie.

Ce scénario tourne sur lumnik Open, gratuit et open source.

Essayer lumnik Open →