Application Visualisation PIM
Vue d'ensemble
Cette application regroupe plusieurs outils internes autour des données produit Linvosges :
- visualisation PIM par SKU ou slug
- visualisation web produit avec variantes
- assistant conversationnel
personal shopper - génération de fiches techniques Excel
- génération de listing web SKU / slug / gamme
- lancement de crawls catégories
Le projet est composé d'un front Angular et d'un backend Node.js/Express. En production, Apache sert le build Angular et reverse-proxy les API applicatives.
Résumé très court par fonctionnalité
Visualisation PIM
Permet de rechercher un produit par SKU ou par slug, puis d'afficher ses données Akeneo enrichies. Deux vues existent :
completpour une lecture technique largewebpour une vue plus proche du rendu e-commerce, avec variantes couleur/taille
Personal Shopper
Interface conversationnelle qui envoie un besoin en langage naturel à un service externe de recommandation, puis affiche les produits retournés avec leurs variantes, statuts et liens vers le site.
Fiches Techniques
Génère un fichier Excel de fiche technique à partir d'un listing produit, d'une liste de SKU et d'un type de template (LDL, TABLE, EPONGE, DECO, VETEMENT, LITERIE). Le moteur s'appuie sur des templates .xlsx versionnés dans le repo.
Listing Web
Génère un workbook Excel de travail à partir d'un export produit et d'un export product model, afin d'obtenir des correspondances entre SKU, slug produit et slug de gamme. Un filtre optionnel par liste de SKU est possible.
Crawl catégories
Déclenche des scripts de crawl catégories FR ou DE en arrière-plan, via des scripts Node externes au repo principal, pointés par variable d'environnement.
Architecture du repo
Le repo est organisé en trois grandes zones :
linvosges_utilitaire_akeneo/- front Angular
- pages, composants, services, assets, templates Excel embarqués côté projet
server/- backend Express
- routes API
- services Akeneo
- moteurs de génération Excel
- historique des générations
- racine du repo
- configuration Apache de référence
- documentation
- fichiers d'exemple ou de test selon l'état du worktree
Arborescence utile :
visualisation_pim/ apache-vhost-akeneo.conf docs/ linvosges_utilitaire_akeneo/ src/ dist/ package.json angular.json server/ main.js ecosystem.config.js routes/ services/ utils/ config/ package.json .env.example
Technique
Front
- Angular standalone components
- Tailwind CSS + DaisyUI
- build via
@angular/build - environnements dev/prod via :
src/environments/environment.tssrc/environments/environment.prod.ts
URLs front :
- en local :
- API back principale :
http://localhost:3005/api - API personal shopper :
http://localhost:8443
- API back principale :
- en prod :
- API back principale :
/api - API personal shopper :
/api/shopper
- API back principale :
Backend
- Node.js
- Express
- Axios pour Akeneo et autres appels HTTP
- ExcelJS pour certains traitements Excel
xlsx-populatepour les fiches techniques- Multer pour les uploads
- Winston pour les logs
- NodeCache pour le cache mémoire
- PM2 pour l'exécution en production
Services externes
- API Akeneo REST
- deeplinks images du site
- service
personal shopperexterne sur port8443 - scripts de crawl catégories situés hors du repo applicatif
Architecture applicative
Front -> Back principal
Angular -> /api/products... -> /api/excel... -> /api/crawl... Express -> authentification Akeneo -> services Akeneo -> générateurs Excel -> scripts de crawl externes
Front -> Personal Shopper
Angular -> /api/shopper/api/chat en production Apache -> proxy vers 127.0.0.1:8443
Production
Navigateur -> Apache HTTPS -> fichiers statiques Angular dist/linvosges-app/browser -> proxy /api vers Node Express:3005 -> proxy /api/shopper vers service shopper:8443
Installation locale
Prérequis
- Node.js et npm
- accès réseau à Akeneo
- credentials Akeneo valides
- service
personal shopperlocal si on veut tester cette fonctionnalité - scripts de crawl locaux si on veut tester les crawls
1. Installer le front
cd linvosges_utilitaire_akeneo
npm install
2. Installer le backend
cd server
npm install
3. Configurer le .env backend
Le backend charge son .env depuis server/.env, pas depuis la racine du repo.
Variables requises au démarrage :
USER_APIPASSWORD_APIGRANT_TYPEAUTHORIZATION
Variables importantes en pratique :
COOKIEPORTNODE_ENVALLOWED_ORIGINSRATE_LIMIT_WINDOW_MSRATE_LIMIT_MAX_REQUESTSLOG_LEVELCACHE_TTLCRAWL_SCRIPT_DIR
Lancer l'application en local
Front Angular
cd linvosges_utilitaire_akeneo
npm start
Par défaut :
- front sur
http://localhost:4200
Backend Express
cd server
npm run dev
Par défaut :
- backend sur
http://localhost:3005 - healthcheck sur
http://localhost:3005/health
Tests
Backend :
cd server
npm test
Front :
cd linvosges_utilitaire_akeneo
npm test
Build et lancement en production
Build Angular
cd linvosges_utilitaire_akeneo
npm run build:prod
Le build de sortie est servi depuis :
linvosges_utilitaire_akeneo/dist/linvosges-app/browser
Lancement backend simple
cd server
npm start
Lancement backend avec PM2
cd server
npm run prod
Le fichier PM2 est :
Configuration actuelle :
- nom du process :
utilitaire-akeneo - script :
main.js - port :
3005 - mode :
cluster cwdcodé en dur sur/home/mwolkowicz/dev/visualisation_pim/server
Point important :
Le cwd PM2 est hard-codé. Si le projet est installé ailleurs sur le serveur, il faut adapter ecosystem.config.js avant de lancer PM2.
Commandes PM2 utiles
pm2 start ecosystem.config.js pm2 list pm2 logs utilitaire-akeneo pm2 restart utilitaire-akeneo pm2 stop utilitaire-akeneo pm2 delete utilitaire-akeneo pm2 save
Apache
Le fichier de référence fourni est :
Il fait quatre choses essentielles :
- redirection HTTP -> HTTPS
- service des fichiers statiques Angular depuis
dist/linvosges-app/browser - rewrite SPA vers
index.html - reverse proxy :
/api->127.0.0.1:3005/api/api/shopper/->127.0.0.1:8443/
En production, Apache est donc le point d'entrée unique.
Vérification après déploiement
pm2 logs utilitaire-akeneo --lines 100
curl http://127.0.0.1:3005/health
Règle critique de ce repo
Les templates .xlsx des fiches techniques font partie de l'application et doivent être versionnés dans git.
PM2 et logs
Deux niveaux de logs existent :
- PM2 :
out.logerror.log
- Winston en production :
logs/combined.loglogs/error.log
Point utile :
Le dossier logs/ doit exister ou être gérable par l'utilisateur qui lance le process, sinon les transports fichier Winston peuvent poser problème.
Fichier .env
Emplacement
server/.env
Variables vraiment nécessaires
USER_APIPASSWORD_APIGRANT_TYPEAUTHORIZATION
Variables fortement conseillées
COOKIEALLOWED_ORIGINSLOG_LEVELCACHE_TTL
Variables optionnelles selon fonctionnalités
CRAWL_SCRIPT_DIR- obligatoire uniquement si on veut utiliser
Crawl catégories
- obligatoire uniquement si on veut utiliser
Comportement au démarrage
Le backend valide les variables au boot via server/config/env-validator.js.
Si des variables requises sont absentes :
- le serveur ne démarre pas
Fichiers et répertoires d'exploitation
Côté backend
server/uploads/- fichiers entrants temporaires
server/exports/- fichiers Excel générés
- historiques JSON
Historiques persistants
server/exports/fiches-tech-history.jsonserver/exports/sku-slug-history.json
Assets applicatifs sensibles
- templates fiches techniques dans
linvosges_utilitaire_akeneo/src/app/features/fiches-tech/templates/ src/assets/data/mesures.jsonpour les unités produits
Points utiles de maintenance
1. Le front et le back sont déployés séparément mais vivent dans le même repo
Il faut penser à :
- installer les dépendances du front
- builder le front
- installer les dépendances du back
- redémarrer PM2
Faire seulement un git pull ne suffit pas.
2. Le personal shopper n'est pas implémenté dans ce repo
Le front suppose qu'un service existe sur :
localhost:8443en local127.0.0.1:8443derrière Apache en production
3. Les crawls catégories dépendent d'un répertoire externe
La feature ne fonctionnera que si CRAWL_SCRIPT_DIR :
- est défini
- existe
- contient les scripts attendus
4. Le backend tourne sur 3005, pas 3000
L'ancien README racine est obsolète sur ce point. La configuration actuelle du repo et de PM2 pointe vers 3005.
5. Les fichiers générés ne sont pas faits pour être commités
uploads et exports sont des répertoires d'exploitation locale/serveur, pas des assets sources.
Séquence de mise en service recommandée
- Cloner le repo.
- Créer
server/.envà partir deserver/.env.example. - Installer les dépendances du front et du back.
- Builder Angular en production.
- Vérifier que les templates
.xlsxsont bien présents dans le repo déployé. - Configurer Apache avec le bon
DocumentRootet les proxies/apiet/api/shopper. - Adapter
server/ecosystem.config.jssi le chemincwdn'est pas le bon. - Lancer le backend avec PM2.
- Tester
GET /health. - Vérifier ensuite les écrans :
- visualisation PIM
- personal shopper
- listing web
- fiches techniques