Aperçu
EasyGift est une plateforme B2B2C de coupons cadeaux et d’avantages d’entreprise en Algérie. Les entreprises alimentent des soldes et émettent des coupons cadeaux numériques à leurs employés, qui les utilisent en magasin auprès d’un réseau de commerçants partenaires par QR code ou code-barres. La plateforme comprend un tableau de bord administrateur, un tableau de bord entreprise pour les sociétés clientes, un tableau de bord distributeur, un tableau de bord de point de vente pour les commerçants et une application mobile cliente reposant sur une API REST.
La plateforme était déjà en production à mon arrivée et servait chaque jour des employés d’entreprises publiques et privées auprès de centaines de commerçants partenaires. J’étais le seul développeur backend d’une petite équipe pluridisciplinaire (un chef de produit, un développeur frontend et un chef d’équipe), chargé de faire évoluer et de réparer ce système en fonctionnement. Comme de l’argent réel y circulait, la justesse en situation de concurrence était la principale contrainte.
Principales contributions techniques
- Concurrence des paiements et race conditions : refonte du flux d’utilisation des coupons en point de vente pour qu’il soit atomique en cas d’usage concurrent, avec des mises à jour de solde encapsulées dans
DB::transaction()etlockForUpdate()sur les lignes financières. Cela a corrigé plusieurs problèmes liés : des soldes pouvant être incrémentés de façon non atomique, un commerçant crédité avant que la transaction soit réellement persistée, et une fenêtre où l’échec d’une notification après le commit pouvait déclencher un double débit lors d’une nouvelle tentative. - Moteur de remboursement : conception d’un moteur de remboursement pour les retraits de coupons. Il rembourse d’abord le budget d’origine, répartit tout excédent sur les autres soldes actifs dans l’ordre chronologique et, en dernier recours, absorbe le reste afin qu’aucun fonds ne soit perdu. Les remboursements sont strictement limités à chaque entité, de sorte que le remboursement d’un distributeur ne peut jamais déborder sur le budget d’une entreprise. Il s’appuie sur un workflow d’approbation des demandes de retrait des entreprises et des distributeurs.
- Migrations de base de données sur un système en production : écriture de migrations idempotentes, transactionnelles et réversibles sur des données de production, dont une migration de réparation qui a reconstitué les enregistrements manquants des employés rattachés à plusieurs entreprises, sans toucher aux lignes existantes.
- Modélisation de données multi-entités : introduction d’un cloisonnement par relation afin qu’un même employé puisse appartenir à plusieurs entreprises ou distributeurs, en passant d’une clé étrangère unique à une table pivot. Cela a corrigé des connexions défaillantes pour les employés dans cette situation, sur le web comme sur mobile.
- Contrôle d’accès : audit et correction des attributions de rôles et de permissions dans les tableaux de bord administrateur et entreprise, et ajout d’une autorisation basée sur des policies pour les employés, distributeurs, coupons et transactions.
Stack technique
| Composant | Technologies |
|---|---|
| Backend | PHP, Laravel |
| Base de données | MySQL |
| Authentification API | Laravel Sanctum |
| Tests | PHPUnit |
| Frontend (tableaux de bord) | Blade |
Plateforme en ligne
Découvrir la plateforme : easygifte.com
Le code source est propriétaire et ne peut pas être publié. Cette étude de cas décrit mes contributions sans divulguer de code confidentiel, d’identifiants ni de données d’entreprise ou d’employés.