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

Sequelize: le service annonce 260 commandes pour 130

Objectif Lire toutes les commandes d'un service Node par son API, sans croire un total faux.

Un service Express et Sequelize, 130 commandes et leurs lignes, lues par offset et limit.

manifests/lab-docker-compose.yml
name: lumnik-scenario-sequelizeservices:  orders:    build: ../lab    ports: ["127.0.0.1:${SEQUELIZE_PORT:-9360}:3000"]
manifests/10-orders.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: scenario-sequelize-a  connector_type: rest-generic  scopes: [ventes]spec:  base_url: http://host.docker.internal:9360  endpoints:    - id: orders      path: /orders      method: GET      pagination: { kind: sequelize, limit: 50 }            # ?offset=0&limit=50, reads $.rows, checks $.count      target:        kind: hybrid        table: ext.scenario_sequelize_a        unique_key: $.id        promote:          - { name: reference, path: $.reference, type: text }          - { name: customer, path: $.customer, type: text }
manifests/20-orders-with-lines.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: scenario-sequelize-lines-a  connector_type: rest-generic  scopes: [ventes]spec:  base_url: http://host.docker.internal:9360  endpoints:    - id: orders      path: /orders-with-lines      method: GET      pagination: { kind: sequelize, limit: 50 }            # findAndCountAll with include: $.count counts the lines      target:        kind: hybrid        table: ext.scenario_sequelize_lines_a        unique_key: $.id        promote:          - { name: reference, path: $.reference, type: text }          - { name: customer, path: $.customer, type: text }
manifests/30-orders-with-lines-distinct.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: scenario-sequelize-distinct-a  connector_type: rest-generic  scopes: [ventes]spec:  base_url: http://host.docker.internal:9360  endpoints:    - id: orders      path: /orders-with-lines-distinct      method: GET      pagination: { kind: sequelize, limit: 50 }            # the same with distinct: true      target:        kind: hybrid        table: ext.scenario_sequelize_distinct_a        unique_key: $.id        promote:          - { name: reference, path: $.reference, type: text }          - { name: customer, path: $.customer, type: text }
manifests/40-orders-watched.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: scenario-sequelize-watched-a  connector_type: rest-generic  scopes: [ventes]spec:  base_url: http://host.docker.internal:9360  default_rate_limit: 1/s                              # a gentle reader: fourteen pages take fourteen seconds  endpoints:    - id: orders      path: /orders      method: GET      pagination: { kind: sequelize, limit: 10 }      target:        kind: hybrid        table: ext.scenario_sequelize_watched_a        unique_key: $.id        promote:          - { name: reference, path: $.reference, type: text }          - { name: customer, path: $.customer, type: text }

Limites

  • lumnik ne distingue pas un total faux de lignes manquantes: il refuse les deux. La correction est dans le service.
  • Une commande supprimée reste dans la table du hub: une lecture complète ajoute et met à jour, elle n'efface pas.
  • 130 commandes fictives, créées au démarrage du service.

Ventes · commandes

Les commandes sont dans un service Node.

Il faut toutes les lire, avec leurs lignes.

Express, Sequelize 6.37, 130 commandes

Le problème

L'API rend la liste par pages.

  • offset et limit, 50 par page.
  • Chaque page donne un count.

Ce qui n'est pas modifié

Le service reste tel quel.

  • Son API, en lecture.
  • Aucun module, aucun réglage.

Le piège

Le count compte les lignes jointes.

  • include sans distinct: true.
  • 260 annoncées pour 130 commandes.

Ce qu'il a fallu écrire

pagination: { kind: sequelize }

Une ligne.

  • Le count de chaque page est vérifié.
  • Un connecteur de 21 lignes.

Quand le total est faux

Le run échoue, il ne ment pas.

  • 260 annoncées, 130 lues.
  • Le message donne les deux chiffres.

La correction

Elle est dans le service.

  • distinct: true dans findAndCountAll.
  • 130 sur 130, relu si la liste bouge.

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 →