Skip to content

Commit 8f4a161

Browse files
benjhoocbisslerCéline DidierActxLeToucangdeudon
authored
chore(release): 2.1.0
* fix(@multi-backend/map): suppression de l'appartenance à l'UL dans les POI (#73) * fix:suppression de la BU odonto * fix:ignorer le fichier de data * fix(@multi-backend/map): rm fichier map-data.json * fix(@multi-backend/map): maj du fichier .dist avec des données factices * docs: maj du CHANGELOG et du UPGRADE --------- Co-authored-by: Céline Didier <[email protected]> Co-authored-by: Benjamin Lemoine <[email protected]> * fix(statistics): suppression de l'usage du deviceID pour le tracking des stats (#74) * fix(@multi-frontend/statistics): creation d'un id unique alétoire pour chaque device * fix(@multi-backend/statistics): prise en compte de la nouvelle uid dans les stats d'usage * fix(@multi-frontend/statistics): prise en compte de la nouvelle uid dans les stats d'usage * docs: mise à jour du CHANGELOG * chore: fix Github workflows for forks PR (#80) * fix(@multi-frontend): chargement des traductions avant debut tour guide (#76) * docs: maj CHANGELOG * fix(@multi-frontend/features): widgets, prise en compte des icones svg (#75) Co-authored-by: Benjamin Lemoine <[email protected]> * docs: maj CHANGELOG * feat(@multi-frontend/schedule): visualisation alternative pour le widget (#36) * feat(@multi-frontend/schedule): visualisation alternative pour le widget * docs(@multi-frontend/schedule): maj README * fix(@multi-frontend/schedule): correction css pour slider esup * docs: maj CHANGELOG * fix(@multi-frontend/schedule): ajout config manquante dans environment.ts.dist pour type d'affichage --------- Co-authored-by: Deudon Guillaume <[email protected]> Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi-backend/auth): forwarding de l'ip du client pour l'authentification CAS (#86) * fix(@multi-backend/auth): forwarding de l'ip du client pour l'authentification CAS * docs: maj Changelog * ci: correction workflow libs, permissions push manquantes si fork (#84) * feat(@multi-frontend/calendar): visualisation alternative pour le widget (#38) * feat(@multi-frontend/calendar): visualisation alternative pour le widget * fix(@multi-frontend/calendar): corrections graphiques * fix(@multi-frontend/calendar): correction du paramétrage * fix(@multi-frontend/calendar): style theme sombre --------- Co-authored-by: Deudon Guillaume <[email protected]> Co-authored-by: CONTOUX Antoine <[email protected]> * fix(@multi-frontend/shared): correction traduction nom service header (#79) * fix(@multi-frontend/shared): correction traduction nom service header * fix(@multi-frontend/shared): correction lint * refactor(@multi-frontend/shared): optimisation fonction du menu et uninstall lodash * docs: maj listing des librairies utilisées sur le projet --------- Co-authored-by: Deudon Guillaume <[email protected]> Co-authored-by: CONTOUX Antoine <[email protected]> Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi-frontend): problème widgets parfois vides (#82) * refactor(@multi-frontend): amélioration de l'App Component * refactor(@multi-frontend): amélioration du layout * fix(@multi-frontend/widgets): correction des widgets qui ne s'affichaient pas tout le temps * fix(@muti-frontend/auth): correction des erreurs sur le store auth lorsque celui-ci n'existe pas * refactor(@multi-frontend/map): usage de takeUntilDestroyed pour la desinscription aux observables * refactor(@multi-frontend): usage de takeUntilDestroyed pour la desinscription aux observables * fix(@multi-frontend/rss): ecart bouton lire+ ios (#87) * chore(@multi-frontend): upgrade ionic 8 (#64) * chore(@multi-frontend): upgrade ionic * fix(@multi-frontend): ion-checkbox * fix(@multi-frontend): ion-input * fix(@multi-frontend): ion-checkbox * fix(@multi-frontend): ion-range ion-toggle * fix(@multi-frontend): app-custom-icon * docs: update library list * chore: fix root script build:front * style(@multi-frontend/auth): input texte vert --------- Co-authored-by: GitHub Action <[email protected]> Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi-backend/mocks): fichiers statiques non accessibles (#85) * fix(@multi-backend/mocks): fix fichiers statiques des mocks non accessibles si non local * fix(@multi-backend/mocks): suppression articles rss factices * feat(@multi-frontend/app-update) ajout d'un module de mise à jour (#92) * doc(@multi-frontend): corrections README * feat(@multi-frontend/app-update): mise en place module pour les updates * feat(@multi-frontend/app-update): clean du module * feat(@multi-frontend/app-update): externalisation de la version dans un service shared * feat(@multi-frontend/app-update): correction usage service version dans menu * feat(@multi-fronntend/app-update): mise en place module de vérification de mise à jour du client * feat(@multi-frontend/shared): création d'un service partagé pour la gestion des alertes * feat(@multi-frontend/alerts): utilisation du système d'alertes pour l'affichage des erreurs in-app * feat(@multi-frontend/app-update): initialisation du module dès le démarrage de l'app * feat(@multi-backend/main): retour des infos de mise à jour sur la route /app-update-infos * feat(@multi-backend/main): utilisation d'un fichier json séparé pour les infos de maj du client * fix(@multi-backend/main): mauvais manip nom de variable * fix(@multi-frontend/app-update): correction lint * docs(@multi-frontend/app-update): maj CHANGELOG + README * build: ajout conf run/debug Jetbrains app-update * fix(@multi-frontend/app-update): probleme de vérif à version équivalente * fix(@multi-frontend/app-update): désactiv. tour guidé si alerte de maj * fix(@multi-frontend/restaurants): date tronquee menus * fix(@multi-frontend/restaurants): date tronquee menus * docs: modification Changelog --------- Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi-frontend/schedule): liste vide voir plus * fix(@multi-frontend/schedule): retrait test aucun planning * docs: mise à jour du Changelog --------- Co-authored-by: Benjamin Lemoine <[email protected]> * chore: upgrade capacitor 7 and node 20 (#102) * chore: node 20 * chore: maj cap7 - maj plugins - fix edge to edge android * docs: update library list * chore: node 20 * doc: update Changelog --------- Co-authored-by: GitHub Action <[email protected]> Co-authored-by: Benjamin Lemoine <[email protected]> * feat(@multi-frontend/shared): navigation, possibilité de forcer l'affichage FULL pour les fonctionnalités du menu TABS (#93) * feat(@multi-frontend): Layout, logic changed to allow force FULL layout on features assigned to tabs menu * fix(@multi-frontend): Layout, rename hasForceFullLayout into determineLayoutByFeature function and explain it * fix(@multi-frontend): README, add explanation about forceFullLayoutFeatures * fix(@multi-frontend): README, add indentation --------- Co-authored-by: rass0012 <[email protected]> * docs: maj CHANGELOG #93 * feat(@multi-frontend): INSA: multi tenant feature (#88) * INSA: Multi tenant contribution * INSA: Multi tenant contribution: fix logos * INSA: Multi tenant contribution: fix translations * INSA: Multi tenant contribution: fix Readme * INSA: Multi tenant contribution: fix notifs * feat(@multi-frontend): add multi-tenant support: update README * feat(@multi-frontend): add multi-tenant support: fix lint errors * feat(@multi-frontend): add multi-tenant support: update README (translations) * feat(@multi-frontend): add multi-tenant support: update README (translations) * feat(@multi-frontend): add multi-tenant support: update README * feat(@multi-frontend): add multi-tenant support: improvements * feat(@multi-frontend): add multi-tenant support: fix * feat(@multi-frontend): add multi-tenant support: fix and improve notifications registering * feat(@multi-frontend): add multi-tenant support: fix and improve notifications registering: fix * feat(@multi-frontend): add multi-tenant support: add chevron in burger menu * feat(@multi-frontend): add multi-tenant support: various fixes * docs: maj CHANGELOG --------- Co-authored-by: bbrogle <[email protected]> Co-authored-by: CONTOUX Antoine <[email protected]> * feat(@multi-frontend/restaurants):: adapt favourites system to allow multiple favourites (#94) Co-authored-by: rass0012 <[email protected]> * docs: maj CHANGELOG PR #94 * feat(@multi-frontend/notifications): open notifications page on notif tap * feat(@multi-frontend): open notifications page on notif tap * docs: update library list * refactor(@multi-frontend): fix eslint * refactor(@multi-frontend): revue Subscription pour les tenants * docs: maj changelog --------- Co-authored-by: GitHub Action <[email protected]> Co-authored-by: Benjamin Lemoine <[email protected]> * feat: ajout d'un connecteur CMS * feat(@multi-backend/auth): adaptation du microservice à l'API grapqhQL du connecteur CMS * fix(@multi-frontend/auth): adaptation nouvelle struct des données retournée par le ms auth * feat(@multi-backend/contact-us): adaptation ms à l'API graphql du connecteur CMS * refactor(@multi-backend/auth): amélioration DTO auth * fix(@multi-frontend/contact-us): adaptation nouvelle struct des données retournées par le ms contact-us * docs(@backend-multi): correction coquilles dans les Readme de auth et contact-us * refactor(@multi-backend/auth): amélioration DTO GraphQL Auth * feat(@multi-backend/features): adaptation du microservice à l'API grapqhQL du connecteur CMS * fix(@multi-frontend): adaptation nouvelle struct des données retournées par le ms features * feat(@multi-backend/important-news): adaptation ms à l'API graphql du connecteur CMS * refactor(@multi-backend/contact-us: oubli console.log * fix(@multi-backend/features): suppression champ status inutile * fix(@multi-frontend/important-news): adaptation nouvelle struct retournées par le ms important-news * feat(@multi-backend/notifications): adaptation ms à l'API graphql du connecteur CMS * fix(@multi-frontend/notifications): adaptation nouvelle struct retournée par ms notifications * feat(@multi-backend/social-networks): adaptation ms à l'API graphql du connecteur CMS * feat(@multi-backend/static-pages): adaptation ms à l'API graphql du connecteur CMS * style(@multi-backend/static-page): suppression ligne vide * fix(@multi-frontend/static-pages): adaptation nouvelle struct retournée par ms static-pages * doc(@multi-frontend): Suppression terme Directus * chore(docker/wordpress): ajout de la config locale pour l'image Wordpress * chore(docker/wordpress): ajout de la conf nginx manquante * build: maj docker compose pour Wordpress + ajout set de données * build: ajout de l'extension wordpress wpc-admin-columns * doc(mocks): correction description package.json * feat(@multi-cms-connector): ajout du connecteur CMS au projet * feat(@multi-cms-connector): ajout d'une route /health pour le monitoring * feat(@multi-cms-connector): ajout d'un decorateur pour route publique /health * doc(@multi-cms-connector): maj copyright Esup-multi * ci: ajout exemple CI pour le connecteur CMS * build: ajout conf run/debug Jetbrains connecteur CMS * refactor(@multi-cms-connector): maj config wordpress par défaut * feat(@multi-cms-connector): construction directe de l'url des assets Directus * fix(@multi-cms-connector): correction config baseUrl Directus * docs: corrections readme * chore: update @types/node version * chore: ajout connectors dans script lib * feat(@multi-cms-connector): ajout graphql-type-json et zod pour la validation des données * fix(@multi-cms-connector): correction modèles et services Directus pour coller à la validation zod * feat(@multi-cms-connector): ajout validation et normalization des modèles Wordpress * refactor(@multi-cms-connector): remove unused normalization function from services * fix(@multi-cms-connector): maj des modèles de retour pour forcer le non nullable * refactor(@multi-cms-connector): update DTOs vis à vis du connecteur CMS * feat(@multi-cms-connector): ajout schémas de validation et fonction de normalisation * refactor(@multi-frontend/important-news): suppression variable env cmsPublicAssetsEndpoint * refactor(@multi-cms-connector): fix eslint issue * refactor(@multi-frontend/multi-tenant): suppression variable env cmsPublicAssetsEndpoint * refactor(@multi-cms-connector): amélioration log des erreurs wordpress * fix(@multi-cms-connector): correction nb de réponses demandées sous-requetes GraphQL * fix(@multi-backend/social-networks): ajout du tri des réseaux sociaux par poids de position * fix(@multi-backend/static-pages): ajout du tri des pages statiques par poids de position * refactor(@multi-backend/static-pages): fix eslint * docs: update library list * docs(@multi-cms-connector): correction doc ajout collection * fix(@multi-cms-connector): timeout configurable depuis le fichier .env * docs: maj Changelog * docs: update library list * build(@multi-cms-connector): maj config lint * refactor(@multi-cms-connector): fix eslint * ci(@multi-cms-connector): github workflows * docs: update library list --------- Co-authored-by: CONTOUX Antoine <[email protected]> Co-authored-by: GitHub Action <[email protected]> * feat(@multi-frontend/schedule): ajout du libellé du planning de l'événement (#96) * feat(Schedule): display planning label on events, useful when multiple plannings are displayed * feat(Schedule): new way to display planning label on event-detail, just get label from API data * feat(Schedule): add pictogram before planning label * feat(Schedule): remove unused code from the first version of feature update * feat(schedule): remove previous frontend logic. Add backend logic to populate event.planningLabel --------- Co-authored-by: rass0012 <[email protected]> * docs: maj changelog #96 * feat(@multi-frontend/auth): création du bouton pour visualiser mot de passe * feat(@multi-frontend/affichage-mot-de-passe): ajout du bouton pour afficher mot de passe * fix(@multi-frontend): fix pb scroll lors de l'affichage clavier sur Android * docs: maj Changelog --------- Co-authored-by: Benjamin Lemoine <[email protected]> * style(@multi-frontend/shared): suppression du text retour sur le bouton back * fix(@multi-frontend/back-button): suppression du text retour * fix(@multi-frontend/shared): rajout arial-label affichage accessibilites * feat(@multi-frontend/shared): ajout de traduction pour le aria-label du bouton back * docs: maj Changelog --------- Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi/features): correction filtrage searchbar multi-8931 * fix(@multi/features): correction filtrage searchbar * refactor(@multi-frontend/features): fix erreur eslint * docs: maj Changelog --------- Co-authored-by: Benjamin Lemoine <[email protected]> * chore: bump dependencies * chore(@multi-bakend/main): bump dependencies @nestjs/common GHSA-cj7v-w2c7-cp7c body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/auth): bump dependencies @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 mongoose GHSA-m7xq-9374-9rvx GHSA-vg7j-7cwx-8wgw multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/cards): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend): bump dependencies * chore: bump dependencies and set engine npm >= 9 * chore(@multi-bakend/chatbot): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/clocking): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/contact-us): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @babel/runtime GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/contacts): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/features): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/important-news): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/mail-calendar): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/map): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/notifications): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/restaurants): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/rss): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/schedule): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/social-networks): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/static-pages): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-bakend/statistics): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg serialize-javascript GHSA-76p7-773f-r4q5 webpack GHSA-4vvj-4cpr-p986 * chore(@multi-backend/mocks): bump dependencies on-headers GHSA-76c9-3jph-rj3q * chore(@multi-cms-connector): bump dependencies @babel/helpers GHSA-968p-4wvh-cqc8 @nestjs/common GHSA-cj7v-w2c7-cp7c axios GHSA-jr5f-v2jv-69x6 body-parser GHSA-qwcr-r2fm-qrc7 brace-expansion GHSA-v6h2-p8h4-qcjw cookie GHSA-pxg6-pf52-xh8x cross-spawn GHSA-3xgq-45jj-v275 dset GHSA-f6v4-cf5j-vf3w form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m micromatch GHSA-952p-6rrq-rcjv multer GHSA-4pg4-qvpc-4q3h GHSA-g5hg-p3ph-g8qg GHSA-fjgf-rc76-4x9p nanoid GHSA-mwcw-c2x4-8c55 path-to-regexp GHSA-9wv6-86v2-598j GHSA-rhx6-c78j-4q9w send GHSA-m6fv-jmcg-4jfg webpack GHSA-4vvj-4cpr-p986 * chore(@multi-frontend): bump dependencies brace-expansion GHSA-v6h2-p8h4-qcjw form-data GHSA-fjxv-7rqg-78g4 formidable GHSA-75v8-2h7p-7m2m http-proxy-middleware GHSA-9gqv-wp59-fq42 GHSA-4www-5p9h-95mh on-headers GHSA-76c9-3jph-rj3q tar-fs GHSA-8cj5-5rvv-wf4v * docs: update library list * chore(@multi-cms-connector): zod 4 pas stable * docs: update library list * docs: update changelog * chore(@multi-backend/auth): fix vulnerabilite sur paquet axios * docs: update library list --------- Co-authored-by: GitHub Action <[email protected]> Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi-frontend): keyboard resize webview conflict revert b0cc72a * feat(@muli-cms-connector): mise en place cache * feat(@multi-cms-connector): ajout module de cache + routes pour webhook * feat(@multi-cms-connector): cache wordpress features * feat(@multi-cms-connector): cache wordpress widgets * feat(@multi-cms-connector): cache wordpress login * feat(@multi-cms-connector): cache wordpress channels * feat(@multi-cms-connector): cache wordpress contact-us * feat(@multi-cms-connector): cache wordpress important-news * feat(@multi-cms-connector): cache wordpress social-networks * feat(@multi-cms-connector): cache wordpress static-pages * feat(@multi-cms-connector): cache directus channels * feat(@multi-cms-connector): cache directus contact-us * feat(@multi-cms-connector): cache directus features * feat(@multi-cms-connector): cache directus important-news * feat(@multi-cms-connector): cache directus login * feat(@multi-cms-connector): cache directus static-pages * feat(@multi-cms-connector): cache directus social-networks * feat(@multi-cms-connector): cache directus widgets * build(@env/wordpress): ajout plugin wordpress wp-webhooks * feat(@multi-backend): suppression cache dans les microservices liés au CMS Microservices concernés : auth, contact-us, features, important-news, notifications, social-networks, static-pages * docs: maj CHANGELOG * fix(@multi-cms-connector): typages manquants pour le cache Directus * feat(@multi-cms-connector): ajout de Redis pour cache partagé * feat(@multi-cms-connector): ajout d'event pour preload les data après clear du cache * feat(@multi-cms-connector): possibilité de désactiver le cache si besoin * refactor(multi-cms-connector): refonte du service de cache + ajout de lock * feat(@multi-cms-connector): suppression event générique inutile * docs: update library list * chore(@multi-cms-connector): correction coquille dans .gitignore * docs: update library list * fix(@multi-connector-cms): ajout d'une var d'env pour l'url publique des assets dans Directus --------- Co-authored-by: GitHub Action <[email protected]> * fix(@multi-frontend/app-update): correction accès apiEndpoint suite multi-tenants * fix(@multi-frontend): correction edge to edge (#120) * fix(@multi-frontend): hotfix: erreur edge-to-edge indisponible sur ios * fix(@multi-frontend): correction erreur cookies matomo (#121) * fix(@multi-frontend): hotfix: correction erreur si module matomo desactivé" * fix(@multi-frontend/matomo): hotfix: plus de stats après suppression des cookies * fix(@multi-frontend/schedule): trim sur le champ asUser * fix(@multi-frontend/schedule): trim sur le champ asUser * doc: update changelog --------- Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi-frontend/chatbot): ion-label hides html elements MULTI-9152 * fix(@multi-frontend/chatbot): ion-label hides html elements * docs: update changelog * docs: correction Changelog --------- Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi-frontend/features): normalize search * fix(@multi-frontend/features): normalize search + fix 36f6ab9 (filtrage sans passer par l'observable existant) * docs: update changelog --------- Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi-backend/contact-us): prevention usurpation adresse mail Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi-frontend/auth): custom logic replaced by ionic component to toggle password visibility Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi-frontend/map): default position if location disabled Co-authored-by: Benjamin Lemoine <[email protected]> * fix(@multi-frontend): external url not sanitized * fix(@multi-frontend): external url not sanitized custom eslint rule * docs: update library list * docs: update changelog --------- Co-authored-by: GitHub Action <[email protected]> Co-authored-by: Benjamin Lemoine <[email protected]> * chore: release 2.1.0 --------- Co-authored-by: Celine Didier <[email protected]> Co-authored-by: Céline Didier <[email protected]> Co-authored-by: Antoine Contoux <[email protected]> Co-authored-by: DEUDON Guillaume <[email protected]> Co-authored-by: Deudon Guillaume <[email protected]> Co-authored-by: GitHub Action <[email protected]> Co-authored-by: rayshor <[email protected]> Co-authored-by: rass0012 <[email protected]> Co-authored-by: Boris <[email protected]> Co-authored-by: bbrogle <[email protected]> Co-authored-by: Logeard Aurelien <[email protected]>
1 parent 43065a2 commit 8f4a161

170 files changed

Lines changed: 122892 additions & 206056 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,48 @@
33
All notable changes to this project will be documented in this file.
44
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
55

6+
## 2.1.0 (2025-10-16)
7+
8+
### Client
9+
#### Bug fixes
10+
* Correction du mode *EdgeToEdge* pour Android
11+
* Désactivation du plugin *EdgeToEdge* pour iOS
12+
* **(app-update)**: Le client n'était plus capable de récupérer la version min requise suite au passage au multi-tenants
13+
* **(chatbot)** : Balises non affichées dans les messages du chatbot
14+
* **(features)** : Normalisation du contenu pour la recherche dans les services
15+
* **(login)** : Afficher/masquer le mot de passe, utilisation du composant Ionic prévu à cet effet
16+
* **(map)** : Prise en compte de l'état d'activation du service de localisation du système
17+
* **(schedule)** : Suppression des espaces dans le champ *asUser* des gestionnaires
18+
* **(shared)** : Navigation, correction faille XSS avec `Browser.open()`
19+
* **(statistics)** : Correction erreur Matomo sur création de cookie sur mobile + utilisation de l'UUID générée pour les stats backend comme identifiant Matomo
20+
21+
#### Autres
22+
* Mises à jour des dépendances suite aux alertes CVE
23+
24+
### Backend
25+
#### Bug fixes
26+
* **(contact-us)** : Prévention partielle des usurpations d'adresse email, et avertissement si l'utilisateur n'est pas connecté
27+
28+
#### New features
29+
* **(auth)** : Suppression du cache dans le microservice, déportation vers le connecteur CMS
30+
* **(contact-us)** : Suppression du cache dans le microservice, déportation vers le connecteur CMS
31+
* **(features)** : Suppression du cache dans le microservice, déportation vers le connecteur CMS
32+
* **(important-news)** : Suppression du cache dans le microservice, déportation vers le connecteur CMS
33+
* **(notifications)** : Suppression du cache dans le microservice, déportation vers le connecteur CMS
34+
* **(social-networks)** : Suppression du cache dans le microservice, déportation vers le connecteur CMS
35+
* **(static-pages)** : Suppression du cache dans le microservice, déportation vers le connecteur CMS
36+
37+
#### Autres
38+
* Mises à jour des dépendances suite aux alertes CVE
39+
40+
### Connecteurs
41+
#### New features
42+
* **(multi-cms-connector)** : Ajout de cache pour palier aux problèmes de performance côté CMS
43+
* **(multi-cms-connector)** : Ajout de routes permettant de vider le cache via des webhooks côté CMS
44+
45+
#### Autres
46+
* Mises à jour des dépendances suite aux alertes CVE
47+
648
## 2.0.0 (2025-07-16)
749

850
### Client

UPGRADE.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Upgrades
22

3+
## 2.0.0 vers 2.1.0
4+
[Mise à jour de la version 2.0.0 à la version 2.1.0](https://www.esup-portail.org/wiki/x/BQAwY)
5+
36
## 1.2.0 vers 2.0.0
47
[Mise à jour de la version 1.2.0 à la version 2.0.0](https://www.esup-portail.org/wiki/x/A4AYWQ)
58

dev/connectors/multi-cms-connector/.env.dist

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ DEFAULT_CMS=
1212

1313
# DIRECTUS
1414
#DIRECTUS_API_URL=xxx
15+
#DIRECTUS_ASSETS_PUBLIC_URL=xxx/assets
1516
#DIRECTUS_API_TOKEN=xxx
1617
#DIRECTUS_API_TIMEOUT=5000
1718

@@ -20,3 +21,31 @@ DEFAULT_CMS=
2021
#WORDPRESS_API_USERNAME=xxx
2122
#WORDPRESS_API_PASSWORD=xxx
2223
#WORDPRESS_API_TIMEOUT=5000
24+
25+
# CACHE (actif par défaut)
26+
CACHE_ENABLED=true
27+
# CACHE TTL (en millisecondes) + invalidation webhook possible
28+
# Channels - 1 jour par défaut
29+
CACHE_TTL_CHANNELS=86400000
30+
# Contact Us - 1 jour par défaut
31+
CACHE_TTL_CONTACT_US=86400000
32+
# Features - 1 jour par défaut
33+
CACHE_TTL_FEATURES=86400000
34+
# Important News - 1 jour par défaut
35+
CACHE_TTL_IMPORTANT_NEWS=86400000
36+
# Login - 1 jour par défaut
37+
CACHE_TTL_LOGIN=86400000
38+
# Social Networks - 1 jour par défaut
39+
CACHE_TTL_SOCIAL_NETWORKS=86400000
40+
# Static Pages - 1 jour par défaut
41+
CACHE_TTL_STATIC_PAGES=86400000
42+
# Widgets - 1 jour par défaut
43+
CACHE_TTL_WIDGETS=86400000
44+
45+
46+
# REDIS (optionnel - pour cache distribué)
47+
# Si non configuré, utilise le cache en mémoire local
48+
#REDIS_HOST=redis-service
49+
#REDIS_PORT=6379
50+
#REDIS_PASSWORD=
51+
#REDIS_DB=0

dev/connectors/multi-cms-connector/.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,5 @@ pids
5555
# Diagnostic reports (https://nodejs.org/api/report.html)
5656
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
5757

58+
# Schema GraphQL généré automatiquement par Apollo
5859
src/schema.gpl
59-
60-
/old/*

dev/connectors/multi-cms-connector/README.md

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,140 @@ Pour connaitre les requêtes GraphQL disponibles côté backend se référer à
1414
### Directus
1515
* `DIRECTUS_API_URL`: URL de l'API Directus
1616
* `DIRECTUS_API_TOKEN`: Token d'accès à l'API Directus
17+
* `DIRECTUS_ASSETS_PUBLIC_URL`: URL publique pour les assets Directus
1718

1819
### Wordpress
1920
* `WORDPRESS_API_URL`: URL de l'API Wordpress
2021
* `WORDPRESS_API_USERNAME`: Nom d'utilisateur de l'API Wordpress
2122
* `WORDPRESS_API_PASSWORD`: Mot de passe de l'API Wordpress
2223

24+
### Redis
25+
* `REDIS_HOST`: Hôte du serveur Redis
26+
* `REDIS_PORT`: Port du serveur Redis
27+
* `REDIS_PASSWORD`: Mot de passe du serveur Redis (optionnel)
28+
* `REDIS_DB`: Numéro de la base de données Redis (optionnel, défaut : 0)
29+
30+
### Cache
31+
* `CACHE_ENABLED`: Active ou désactive le cache (true/false, défaut : true)
32+
* `CACHE_TTL_CHANNELS`: TTL du cache pour la collection Channels (en secondes)
33+
* `CACHE_TTL_CONTACT_US`: TTL du cache pour la collection Contact-Us (en secondes)
34+
* `CACHE_TTL_FEATURES`: TTL du cache pour la collection Features (en secondes)
35+
* `CACHE_TTL_IMPORTANT_NEWS`: TTL du cache pour la collection Important-News (en secondes)
36+
* `CACHE_TTL_LOGIN`: TTL du cache pour la collection Login (en secondes)
37+
* `CACHE_TTL_SOCIAL_NETWORKS`: TTL du cache pour la collection Social-Networks (en secondes)
38+
* `CACHE_TTL_STATIC_PAGES`: TTL du cache pour la collection Static-Pages (en secondes)
39+
* `CACHE_TTL_WIDGETS`: TTL du cache pour la collection Widgets (en secondes)
40+
41+
## Cache
42+
43+
Le connecteur CMS utilise un système de cache Redis distribué pour optimiser les performances et éviter les latences des requêtes vers le CMS.
44+
45+
### Architecture du Cache
46+
47+
- **Backend principal** : Redis (avec fallback automatique vers le cache mémoire si Redis n'est pas disponible)
48+
- **Namespace** : `multi:{env}:cache:` pour éviter les conflits avec d'autres services
49+
- **Clés** : Format `multi:{env}:cache:{collection}:all` ou `multi:{env}:cache:{collection}:{id}`
50+
- **TTL configurables** : Par collection via variables d'environnement
51+
- **Invalidation** : Manuelle via API REST et automatique au démarrage
52+
- **Protection contre Cache Stampede** : Verrous distribués Redis (`multi:{env}:lock:{collection}:{id}`) avec tokens sécurisés
53+
- **Déduplication des promesses** : Évite les appels multiples en parallèle sur la même instance
54+
55+
### Configuration du Cache
56+
57+
#### Activation/Désactivation
58+
Le cache peut être entièrement désactivé pour les tests de performance :
59+
60+
```bash
61+
# Désactiver le cache
62+
CACHE_ENABLED=false
63+
```
64+
65+
#### Variables d'environnement TTL
66+
Les TTL du cache de chaque collection peut être paramétré depuis le fichier .env (cf. Configuration ci-dessus)
67+
68+
#### Valeurs par défaut (fallback)
69+
Si les variables d'environnement ne sont pas définies, les TTL suivants sont utilisés :
70+
- **Collections dynamiques** (features, important-news, widgets) : 1 heure
71+
- **Collections statiques** (login, contact-us, channels, etc.) : 1 jour
72+
- **TTL par défaut** : 5 minutes
73+
74+
### API Cache
75+
76+
Des routes sont mises à disposition pour vider le cache depuis une application tierce.
77+
Cela peut être utile si on souhaite utiliser des TTL plus long, mais pouvoir tout de même invalider le cache lors de la modification d'un élément dans le CMS par exemple.
78+
79+
#### Vider tout le cache
80+
```bash
81+
GET /cache/clear-all
82+
```
83+
84+
#### Vider le cache d'une collection
85+
```bash
86+
GET /cache/clear/{collection}
87+
```
88+
89+
Collections disponibles : `channels`, `contact-us`, `features`, `important-news`, `login`, `pages`, `social-networks`, `static-pages`, `widgets`
90+
91+
### Système d'événements et Preload
92+
93+
Le système utilise des événements NestJS pour déclencher automatiquement le preload des données après vidage du cache.
94+
95+
#### Architecture événementielle
96+
97+
1. **Au démarrage** : Le `CacheService` vide tout le cache via le pattern `multi:{env}:cache:*`
98+
2. **Via l'API** : Le `CacheController` invalide une collection et émet `{cms}.{collection}.cache.cleared`
99+
3. **Services** : Chaque service écoute son événement spécifique et preload automatiquement
100+
101+
#### Implémentation dans un service
102+
103+
Chaque service de collection implémente le pattern suivant :
104+
105+
```typescript
106+
import { Injectable, Logger } from '@nestjs/common';
107+
import { OnEvent } from '@nestjs/event-emitter';
108+
import { CacheService } from '@cache/cache.service';
109+
import { CacheCollection } from '@cache/cache.config';
110+
111+
@Injectable()
112+
export class FeaturesWordpressService {
113+
private readonly logger = new Logger(FeaturesWordpressService.name);
114+
115+
constructor(
116+
private readonly wordpressService: WordpressService,
117+
private readonly cacheService: CacheService,
118+
) {}
119+
120+
@OnEvent('wordpress.features.cache.cleared')
121+
async handleCacheCleared() {
122+
this.logger.log('Received cache cleared event - preloading data...');
123+
try {
124+
await this.preloadData();
125+
} catch (error) {
126+
this.logger.error(
127+
'Failed to preload features after cache clear:',
128+
error.message,
129+
);
130+
}
131+
}
132+
133+
public async preloadData() {
134+
this.logger.log('Preloading features...');
135+
await this.getFeatures();
136+
this.logger.log('Features preloaded successfully');
137+
}
138+
139+
async getFeatures(): Promise<Features[]> {
140+
return this.cacheService.getOrFetchWithLock(
141+
CacheCollection.FEATURES,
142+
() => this.loadFeaturesFromWordpress(),
143+
);
144+
}
145+
146+
private async loadFeaturesFromWordpress(): Promise<Features[]> {
147+
this.logger.debug('Loading features from WordPress...');
148+
// Requête GraphQL vers le CMS...
149+
const data = await this.wordpressService.executeGraphQLQuery(/* ... */);
150+
return data.features.nodes.map(this.mapToMultiModel);
151+
}
152+
}
153+
```

0 commit comments

Comments
 (0)