Contact
Travaillons ensemble
Plateforme d'Export de Données Produits B2B

Plateforme d'Export de Données Produits B2B

Application web interne B2B automatisant l'export de catalogues de produits promotionnels - génération CSV avec docs et synchronisation directe via l'API WebService PrestaShop pour les revendeurs.

2013 - 2016
~3 ans (développement actif 2013-2015, maintenance jusqu'en 2016)
Senior Software Engineer (~93% du code applicatif)
PHP 5mynd-framework (custom MVC)MySQLApacheBootstrap 2jQuery 1.8jQuery UIDynatreePrestaShop WebService APIZend_MailSimpleTestSVN (Subversion)OVH Dedicated ServersLinux (cron, PID)

Lignes de code

28,794

PHP, JavaScript, CSS

Fichiers source

111

Fichiers applicatifs (hors framework)

Tables en base

36

30 en lecture + 6 en lecture/écriture

Langues supportées

5

FR, EN, DE, IT, ES

Présentation

Définition et périmètre du projet

La Plateforme d'Export de Données Produits B2B (nom interne : `europeansourcing_export`) est une application web interne développée pour European Sourcing (marque commerciale : EuropeanTool), un acteur majeur du secteur de l'objet publicitaire et promotionnel basé à Agen et Bordeaux, en France.

Cette application constitue le module d'export de données produits de la plateforme European Sourcing. Elle permet aux revendeurs (distributeurs d'objets promotionnels) d'exporter le catalogue produits des fournisseurs vers leurs propres systèmes - soit sous forme de fichiers CSV (avec images), soit par synchronisation directe via l'API WebService PrestaShop.

Le système gère le cycle de vie complet de la demande à la livraison : authentification, validation, facturation, exécution batch, suivi de progression et notification automatique par email à chaque étape.

Domaine

Objets publicitaires et textiles - sourcing, distribution, e-commerce B2B

Utilisateurs cibles

Revendeurs B2B (distributeurs d'objets promotionnels) abonnés à European Sourcing, et l'équipe commerciale et technique EuropeanTool (administrateurs)

Périmètre fonctionnel
Export CSV avec ZIP et docs
Synchronisation WebService PrestaShop
Gestion des quotas revendeurs
Workflow de facturation et validation
Traitement parallele des exports
Monitoring temps réel des processus
Mapping de categories (ES ↔ PrestaShop)
Notifications email multi-étapes
Données produits multilingues (5 langues)
Architecture Overview
MVC monolithic architecture with CLI batch processing and PrestaShop API integration
File Type Distribution

Objectifs, contexte, enjeux et risques

Vision stratégique et contraintes opérationnelles

Objectifs
  • Permettre aux revendeurs abonnés d'exporter les fiches produits (données + docs) des fournisseurs sélectionnés au format CSV ou via WebService PrestaShop
  • Automatiser la synchronisation des catalogues produits entre la base European Sourcing et les boutiques PrestaShop des revendeurs
  • Gerer un système de quotas pour contrôler le volume d'exports par revendeur
  • Fournir un workflow complet de validation : demande → confirmation → facturation → exécution → livraison par email
  • Supporter l'exécution parallele de jusqu'à 6 exports simultanes avec gestion robuste des processus (PID, kill, détection zombies)
Export Lifecycle (State Machine)
Complete export lifecycle: from request to delivery with error recovery and zombie detection
Contexte

Le projet s'inscrit dans un écosystème European Sourcing plus large comprenant 15+ applications interconnectées : la plateforme principale, l'extranet, le front revendeur, le module de traduction, le back-office fournisseur, l'API, et bien d'autres.

L'application repose sur un framework PHP MVC maison (mynd-framework) et utilisé la base de données partagee `europeansourcing` (MySQL) hébergée sur des serveurs dédiés OVH. L'architecture suit un modèle monolithique PHP classique avec des scripts CLI pour le traitement batch en arriere-plan.

Un wiki DokuWiki interne hébergé sur `wikidev.es-recette.com` servait de documentation technique partagee. La page `es_export` documenté spécifiquement ce module, signee par Jose DA COSTA le 03/11/2016.

Enjeux
  • Génération de revenus - les exports sont un service facturé. Le workflow inclut explicitement l'envoi d'une facture avant le déclenchement
  • Satisfaction client B2B - la qualité et la fiabilité des exports conditionnent la capacité des revendeurs à alimenter leurs boutiques en ligne
  • Volume de données - le système géré potentiellement jusqu'à 500 000 références produits avec docs
  • Support multilingue - les exports gèrent 5 langues (FR, EN, DE, IT, ES)
Risques

Performance

Les exports manipulent de gros volumes de données (docs + CSV). Memory limit mis a illimité (-1) avec gestion explicite des erreurs mémoire

Concurrence et deadlocks

Maximum 6 exports paralleles, 3 par IP serveur, 1 par URL PrestaShop - conçu pour prévenir les deadlocks MySQL

Processus zombies

Mécanisme de détection via /proc/PID remettant automatiquement les exports bloqués en statut "asked" avec le label "zombie"

Sécurité

Authentification par MD5 (sans salt), exécution de commandes shell (exec) depuis le code PHP pour la gestion des processus

Database Schema (Export Tables)
Entity-relationship diagram of the 6 export-specific tables (read/write) linked to shared product and reseller tables

Phases de réalisation

Actions concrètes et contributions personnelles

Project Progress Timeline
Phase 1
Phase 1 - Export CSV
~2013
  • Développé le module d'export de données produits au format CSV de zero
  • Implémenté la génération automatique de ZIP contenant les données CSV et un ZIP séparé pour les docs produits
  • Construit le workflow complet : demande → validation admin → exécution batch → envoi par email avec liens de téléchargement
  • Conçu le système d'authentification double (revendeurs via Contact + administrateurs via Extranet)
Phase 2
Phase 2 - CSV format PrestaShop
~2013-2014
  • Ajoute un second format d'export CSV spécifiquement structure pour l'import PrestaShop
  • Créé la classe dédiée CSV_Prestashop avec mapping de champs compatible PrestaShop
  • Premiers exports générés le 14 février 2014 (export-akor-csv)
Phase 3
Phase 3 - Intégration WebService PrestaShop
~2014
  • Intégré l'API WebService PrestaShop pour la synchronisation directe des produits
  • Implémenté les opérations CRUD completes : produits, categories, fournisseurs, marques, attributs et docs via API REST/XML
  • Construit le support multiboutique PrestaShop (groupes de boutiques)
  • Développé le moteur de mapping de categories entre European Sourcing et les taxonomies PrestaShop
  • Implémenté le système de mise à jour incrémentale base sur un intervalle configurable (en jours)
  • Conçu le système de gestion de la concurrence : 6 exports max en parallele, 3 max par IP, prévention des deadlocks
Phase 4
Phase 4 - Outils d'administration
~2014
  • Construit l'interface d'administration pour la gestion des statuts en masse
  • Développé les outils de purge : suppression de tous les produits ES, categories, fournisseurs, marques et attributs sur un WebService PrestaShop distant
  • Implémenté le monitoring temps réel des processus (intégration ps aux)
  • Créé le mécanisme de détection des processus zombies et de récupération automatique
Phase 5
Phase 5 - Notifications et quotas
~T3 2014
  • Implémenté le système de quotas par revendeur (quotas CSV et WebService gérés séparément)
  • Construit le système de notification email automatique à chaque étape du workflow
  • Coordonne avec Dominique pour les notifications supplémentaires à l'équipe commerciale (septembre 2014)
WebService Export Sequence
Complete WebService export flow: from reseller request through admin validation, cron execution, PrestaShop API synchronization, to email notification

Équipe et interactions

Collaboration et écosystème des parties prenantes

L'équipe était compacte : 3 développeurs + 2 personnes côté commercial/admin, fonctionnant sans méthodologie Agile formelle mais utilisant un bugtracker pour le suivi des anomalies (référence #0000919 trouvee dans le code).

Code Contribution Distribution
Équipe de développement
~93%Jose DA COSTA

Développeur principal - ~93% du code applicatif (~11 800 / 12 632 lignes). Conçu l'architecture, construit tous les contrôleurs, modèles, vues, scripts CLI et l'intégration PrestaShop. Auteur de la documentation wiki interne.

~6%Guillaume (wamania)

Auteur du framework et développeur - Créé le mynd-framework (framework MVC, ~5 663 lignes) partage entre les projets de l'écosystème. Mis en place la structure initiale du projet et contribué a ~6% du code applicatif.

~1%Dominique (dom)

Développeur (interventions ponctuelles) - 7 contributions identifiées (~100-150 lignes) : ajouts de notifications email, corrections bugtracker #919, gestion des erreurs de contenu duplique.

Équipe commerciale et administration
Carine Ruffier

Contact commercial - Destinataire des notifications d'export (demandes, confirmations, erreurs)

Celine

Support administratif - Destinataire des notifications d'export sur tous les environnements

Parties prenantes externes

Revendeurs B2B utilisant le module pour alimenter leurs boutiques PrestaShop, fournisseurs d'objets promotionnels (Anda, ELASTO FORM, KARL KNAUER, PAUL STRICKER, PORTIA, Troika, etc.), OVH (hébergement production), Systonic (infra historique, serveur SVN).

Résultats et impact

Résultats mesurables pour le projet et l'entreprise

Features Delivered by Category
Fonctionnalités livrees
  • Système complet d'authentification double (revendeurs + administrateurs)
  • Module d'export CSV avec génération automatique de ZIP (données + docs)
  • Export CSV au format spécifique PrestaShop
  • Synchronisation WebService PrestaShop via API REST/XML
  • Gestion complète du cycle de vie des exports (asked → confirmed → running → scheduled/none/error)
  • Interface d'administration avec monitoring temps réel des processus
  • Outils de purge PrestaShop (produits, categories, fournisseurs, marques, attributs)
  • Système de quotas par revendeur (CSV et WebService separes)
  • Système de notification email multi-destinataires
  • Moteur de mapping de categories inter-plateformes (European Sourcing ↔ PrestaShop)
  • Détection automatique des processus zombies et récupération
  • Support multilingue des données produits (5 langues)
  • Support multiboutique PrestaShop
  • Système de mise à jour incrémentale configurable
Technical Metrics
Impact business
  • Génération directe de revenus - chaque export est un service facturé avec workflow de facturation integre
  • Capacité catalogue - système dimensionne pour gérer jusqu'à 500 000 références produits
  • Remplacement d'un processus manuel coûteux - automatisation de l'intégration des catalogues fournisseurs dans les boutiques revendeurs
  • Activation client B2B - les revendeurs peuvent alimenter automatiquement leurs sites e-commerce PrestaShop avec des données produits et docs à jour
Évolution personnelle
  • Première expérience de conception et construction d'une plateforme complète d'intégration de données B2B de bout en bout
  • Maîtrise de l'API WebService PrestaShop (REST/XML) avec toutes ses particularites et comportements non documentes
  • Apprentissage de la gestion de processus concurrents en PHP - suivi PID, détection zombies, prévention deadlocks
  • Compréhension approfondie des workflows e-commerce B2B : quotas, intégration facturation, catalogues multilingues
  • Renforcement des compétences MySQL avec des requetes complexes (sous-requetes, jointures multiples, FIELD ORDER)
  • Expérience de gestion d'un système en production sous pression business réelle (service facturé = zero tolérance pour les pannes)
Skills Mobilized (Radar)

Les lendemains du projet

Ce qui s'est passe après la livraison

Immédiate : La plateforme a été activement utilisée par les revendeurs European Sourcing pour la synchronisation de catalogues. Le système de notifications ajoute en septembre 2014 montre que la plateforme generait une activité commerciale réelle, l'équipe commerciale etant notifiée de chaque demande d'export.

A moyen terme : La dernière mise à jour du wiki (novembre 2016) indiqué que la plateforme est restée opérationnelle au moins 2 ans après la phase principale de développement. Le code a été maintenu mais aucune fonctionnalité majeure n'a été ajoutee après le T4 2014.

État actuel : Le projet est archive (backup NAS date de février 2015). European Sourcing a depuis fait évoluer sa stack technologique. Le module d'export a rempli sa fonction pendant une phase de croissance critique de l'entreprise, permettant à des dizaines de revendeurs d'intégrer les catalogues de produits promotionnels dans leurs plateformes e-commerce.

Héritage : Les patterns développés pour ce projet - traitement batch concurrent, détection de zombies, machines a états de workflow, mapping de categories inter-plateformes - se sont averes être des concepts réutilisables dans les projets ultérieurs. L'expérience de construction d'un outil B2B générateur de revenus a forge un état d'esprit orienté produit qui s'est avéré précieux dans les rôles suivants.

Infrastructure & Deployment
Development to production deployment architecture: local workstations, OVH servers, and reseller PrestaShop shops
Architecture Complexity Distribution

Regard critique

Analyse rétrospective et enseignements

Points forts
  • Architecture modulaire claire - séparation nette entre interface web (contrôleurs/vues) et scripts d'exécution CLI, permettant les exports en arriere-plan sans bloquer l'interface
  • Gestion robuste de la concurrence - le système de limitation multi-niveaux (6 max, 3 par IP, 1 par URL) avec détection des deadlocks MySQL démontré une maturité opérationnelle acquise par l'expérience en production
  • Détection des processus zombies - le mécanisme de vérification via /proc/PID est une solution élégante pour detecter les exports bloqués et les relancer automatiquement
  • Workflow métier complet - le cycle de vie des exports (asked → confirmed → running → scheduled → none/error) avec notifications email à chaque étape représente un processus métier bien implemente
  • Système de quotas - la gestion fine des quotas par revendeur (CSV et WebService separes) montre une compréhension des contraintes commerciales B2B
Points d'amélioration
  • Sécurité - l'authentification utilisé MD5 sans salt (obsolete et vulnérable). Les appels exec() avec des parametrès incomplètement assainis (PID) presentent un risque d'injection de commandes
  • Dette technique du framework - le mynd-framework maison, bien que fonctionnel, manque de la robustesse et de la documentation des frameworks communautaires (Symfony, Laravel)
  • Pas de tests applicatifs - les seuls tests presents appartiennent à l'ORM du framework. Le code métier de l'export n'a pas de tests unitaires ni d'intégration
  • Code procedural dans les CLI - les scripts CLI utilisent beaucoup de variables globales et de goto (labels mail:, nomail:), réduisant la maintenabilité
  • Pas de file d'attente - les exports sont gérés par des requetes SQL directes plutôt qu'un système de queue (RabbitMQ, Redis), limitant la scalabilité
Ce que je ferais différemment
  • Utiliser un framework PHP standard (Symfony ou Laravel) au lieu d'un framework maison pour bénéficier de l'écosystème, de la documentation et de la communauté
  • Implementer un vrai système de file d'attente (RabbitMQ, Beanstalkd) pour la gestion asynchrone des exports
  • Utiliser bcrypt/argon2 pour le hachage des mots de passe au lieu de MD5
  • Ajouter des tests fonctionnels sur le workflow d'export
  • Mettre en place un pipeline CI/CD pour automatiser les déploiements
  • Utiliser un superviseur de processus (Supervisord) au lieu de gérer les processus directement depuis le code PHP
Enseignements durables
  • La gestion de la concurrence dans les traitements batch est un problème complexe nécessitant une approche multi-niveaux (limités globales + par IP + par URL + détection zombies)
  • L'intégration avec des APIs tierces (PrestaShop WebService) requiert une gestion fine des erreurs, du retry et de la compatibilité entre versions
  • Un workflow métier impliquant de la facturation doit être robuste : chaque étape doit être tracee, les erreurs notifiees, et le système doit pouvoir reprendre après un échec
  • Le mapping entre systèmes de categorisation hétérogènes est un problème récurrent dans les intégrations e-commerce B2B

Competences mobilisees

Competences techniques et humaines appliquees

Galerie d'images

Captures et visuels du projet