Au cours de mes études en ingénierie logicielle, j'ai approfondi ma compréhension des plateformes B2B, se concentrant sur les échanges entre entreprises. Mon projet, BuyPath, se démarquait par son orientation vers des chaînes de distribution courtes, permettant un contact direct entre producteurs et détaillants et supprimant les intermédiaires onéreux qui compromettent l'équité des transactions.
BuyPath a pour but d’être conçu en réponse aux difficultés rencontrées par les agriculteurs, souvent confrontés à la dévaluation de leurs produits par les grandes surfaces et les services de distribution. L'objectif était de leur redonner le pouvoir de fixer des tarifs justes, tout en offrant aux détaillants un accès direct à des produits frais et locaux. Cette initiative ne se limitait pas à la résolution d'une crise économique et sociale, mais renforçait également une filière essentielle à la prospérité de la France.
Le projet était porté par un grossiste, motivé par la création d'un écosystème équilibré où les petits commerçants pourraient s'approvisionner en produits de qualité auprès de producteurs locaux, favorisant ainsi l'économie locale et le développement durable. Le développement de BuyPath s'est appuyé sur la méthodologie agile Scrum, permettant une interaction continue avec le commanditaire pour la validation régulière des fonctionnalités. Cette approche flexible et itérative a facilité l'alignement du projet avec les besoins spécifiques du commanditaire.
Au cœur de ma contribution se trouvait la création d'une API REST en J2EE, un défi qui m'était alors nouveau. Ce travail exigeait de concevoir une architecture robuste, incorporant des éléments tels que DAO pour l'interaction avec la base de données, le pattern Singleton pour garantir une instance unique de chaque service et des services métier pour le traitement logique. Ces composants étaient interconnectés via JPA (Java Persistence API), un framework facilitant la gestion de la persistance des données, en permettant une communication fluide entre l'application Java et la base de données.
Le premier défi technique a été la mise en place du système d'inscription côté back-end. Pour cela, j'ai développé une classe utilisateur, définissant des propriétés spécifiques convenues avec le commanditaire. L'utilisation de DAO et du pattern Singleton a été cruciale pour gérer efficacement les données utilisateurs. De plus, l'intégration d'une fonction de hachage pour sécuriser les mots de passe en base de données a ajouté une couche de complexité. Implémenter cette logique de sécurisation dans l'API a nécessité une compréhension approfondie de ces concepts et une série de tests unitaires pour assurer la fiabilité et la sécurité du système.
Après avoir finalisé le processus d'inscription, mon attention s'est portée sur le développement de la fonctionnalité d'authentification des utilisateurs. Cette étape cruciale comprenait l'intégration d'un système de tokens pour gérer les sessions. Chaque token, généré lors de la connexion, contenait des informations essentielles telles que le rôle de l'utilisateur sur la plateforme B2B, identifiant l'utilisateur comme détaillant ou grossiste. Cette distinction était cruciale, car, selon leur rôle, les utilisateurs n'avaient pas accès aux mêmes pages ni aux mêmes fonctionnalités. Par exemple, les détaillants pouvaient accéder à des interfaces conçues pour la sélection et l'achat de produits, tandis que les grossistes disposaient d'outils spécifiques pour la gestion des stocks et la mise à jour des listes de produits. Cette séparation du contenu et des fonctionnalités, basée sur le rôle de l'utilisateur, était un aspect clé pour garantir une expérience utilisateur pertinente et sécurisée sur la plateforme. Ce mécanisme assurait la déconnexion automatique de l'utilisateur à l'expiration de sa session, renforçant ainsi la sécurité de la plateforme.
La complexité résidait notamment dans la gestion des mots de passe. Les mots de passe stockés dans la base de données étaient cryptés (hachés) pour des raisons de sécurité. Le défi technique majeur a été de mettre en œuvre un système capable de récupérer le mot de passe haché et de le comparer efficacement avec le mot de passe saisi par l'utilisateur lors de la connexion. Dans un environnement Java suivant le modèle MVC (Modèle-Vue-Contrôleur), cela impliquait la création d'une logique de contrôleur sophistiquée pour gérer cette comparaison. Par exemple, lorsqu'un utilisateur tente de se connecter, le contrôleur récupère le mot de passe haché correspondant de la base de données, utilise une fonction de déchiffrement Java pour comparer le hachage avec le mot de passe entré, et valide ou non l'accès en fonction de cette comparaison.
Ce projet a été une expérience fondamentale pour l'élargissement de mes compétences techniques. J'ai non seulement appris à mettre en œuvre une architecture MVC dans un contexte réel, mais aussi à intégrer efficacement chaque composant avec la base de données. Cette expérience m'a permis d'affiner mes compétences en programmation Java et de renforcer ma capacité à résoudre des problématiques complexes. Un aspect crucial de ce projet, c'est qu’au départ, nous étions cinq et avons fini par être deux. Cela n’a pas été sans impact puisque nous n’avons pu finir le projet dans les temps.
Aujourd’hui, je repense à ce projet, et je me dis qu’il aurait été très certainement utile au vu du contexte actuel et me donne envie de programmer le développement d’une nouvelle application dans le même intérêt. Concernant l'avenir du projet, le commanditaire a choisi de collaborer avec une entreprise de services pour finaliser le développement. La complexité du projet et l'importante charge de travail requéraient plus de temps et de moyens que ceux à notre disposition.