Flux cinema

Entité : Cinema

Les informations d’un complexe proviennent de plusieurs sources :

  • DB2 : Création et mise à jour
  • Cineges API central : création et mise à jour
  • Cineges API complexe : mise à jour

Topics

cineges.cinema.save

Enregistre les informations d’un complexe dans ES, puis les propage dans cineges.cinema.data.

Le topic est recopié d’un complexe vers le central.

Les données qui transitent sont des entités Cinema.

cineges.cinema.data

Copie des entités Cinema depuis ES.

Le topic est copié du central vers les complexes.

Flux

Fonctionnement

L’objet Cinema peut être modifié depuis plusieurs endroits :

  • Les jobs d’import AS400
  • Les API central
  • Les API complexe

Central

Les données sont poussées par les API (ou les jobs d’import AS400) dans le topic cineges.cinema.save. Les données remontent aussi depuis les complexes via la passerelle Kafka2Kafka.

sequenceDiagram participant A as API participant TSaveCentral as cineges.cinema.save central participant JCentral as Job central participant TDataCentral as cineges.cinema.data central participant TDoneCentral as notifications central participant TSaveComplexe as cineges.cinema.save complexe participant JComplexe as Job complexe participant TDataComplexe as cineges.cinema.data complexe participant TDoneComplexe as notifications complexe A->>TSaveCentral: Cinema TSaveComplexe->>TSaveCentral: Kafka2Kafka TSaveCentral->>JCentral: Cinema JCentral->>TDataCentral: Cinema JCentral->>TDoneCentral: Notification TSaveCentral->>TSaveComplexe: Kafka2Kafka TDoneCentral->>TDoneComplexe: Kafka2Kafka

Le job Cinema partie central récupère les cinémas à enregistrer, s’assure que certaines données ne soient pas remplacées par null (configuration, pricing), les enregistre dans le ElasticSearch central et transmet dans le topic cineges.cinema.data. Il génère aussi une notification.

Complexe

Les données à enregistrer proviennent du central par le topic cineges.cinema.data. Elles peuvent aussi être modifiées localement, les api écrivent dans le topic cineges.cinema.save. Donc le job Cinema côté complexe écoute sur les deux topics.

sequenceDiagram participant TSaveCentral as cineges.cinema.save central participant JCentral as Job central participant TDataCentral as cineges.cinema.data central participant TDoneCentral as notifications central participant A as API participant TSaveComplexe as cineges.cinema.save complexe participant JComplexe as Job complexe participant TDataComplexe as cineges.cinema.data complexe participant TDoneComplexe as notifications complexe A->>TSaveComplexe: Cinema TSaveComplexe->>JComplexe: Cinema TDataComplexe->>JComplexe: Cinema JComplexe->>TSaveComplexe: Uniquement si modifications nécessitant une propagation JComplexe->>TDoneComplexe: Notification TSaveComplexe->>TSaveCentral: Kafka2Kafka

Pour chaque objet Cinema à traiter, si il correspond au complexe configuré, on regarde la partie Price, pour créer les produits associés dans Odoo. Si les identifiants produits sont ajoutés/modifiés, on ajoute un flag “ShouldSave” pour indiquer au job de réécrire la donnée dans le topic cineges.cinema.save, pour que les données enregistrées remontent au central.

ATTENTION

  • Le fait de remettre le cinéma dans le topic cineges.cinema.save sur le central crée une boucle. Lors du deuxième passage du cinema dans le job, les données Odoo existant déjà, le flag “ShouldSave” n’est pas positionné, et l’objet Cinema n’est pas réémis.
  • L’objet Cinema écrit dans cineges.cinema.save sur le complexe va remonter au central, pour ensuite redescendre sur les complexes, via cineges.cinema.data, et sera à nouveau traité dans la boucle. Donc dans le pire des cas, une modification sur un objet Cinema faite au niveau d’un complexe peut passer 3 fois dans le job : une première fois pour la création, une deuxième fois en sortie du job (réécriure dans cineges.cinema.save), une troisième fois en provenance du central.
  • En utilisation “normale” (par exemple, modification d’un paramètrage du complexe), l’objet n’est traité que 2 fois : l’enregistrement local, puis l’enregistrement provenant du central.