Überblick
EasyGift ist eine B2B2C-Plattform für Geschenkgutscheine und Mitarbeiter-Benefits in Algerien. Unternehmen laden Guthaben auf und geben digitale Geschenkgutscheine an ihre Mitarbeitenden aus. Diese lösen sie per QR- oder Barcode in einem Netz von Partnerhändlern vor Ort ein. Die Plattform umfasst ein Admin-Dashboard, ein Unternehmens-Dashboard für Kundenunternehmen, ein Distributoren-Dashboard, ein Kassen-Dashboard für Händler und eine mobile Kunden-App, die auf einer REST-API aufbaut.
Die Plattform war bereits live, als ich dazukam, und wurde täglich von Mitarbeitenden öffentlicher und privater Unternehmen in einem Netz von Hunderten Partnerhändlern genutzt. Ich war der alleinige Backend-Entwickler in einem kleinen, funktionsübergreifenden Team (Product Manager, Frontend-Entwickler und Teamleiter) und habe dieses laufende System erweitert und repariert. Da über die Plattform echtes Geld floss, war Korrektheit bei Nebenläufigkeit die wichtigste Randbedingung.
Zentrale Ingenieurbeiträge
- Zahlungs-Nebenläufigkeit und Race Conditions: Den Einlösevorgang an der Kasse so neu aufgebaut, dass er auch bei gleichzeitiger Nutzung atomar bleibt. Guthabenänderungen laufen in
DB::transaction()mitlockForUpdate()auf den Finanzzeilen. Damit wurden mehrere zusammenhängende Probleme behoben: Guthaben, die nicht atomar erhöht werden konnten, ein Händler, dem Geld gutgeschrieben wurde, bevor die Transaktion tatsächlich persistiert war, und ein Zeitfenster, in dem eine fehlgeschlagene Benachrichtigung nach dem Commit bei einem Retry eine doppelte Abbuchung auslösen konnte. - Erstattungs-Engine: Eine Erstattungs-Engine für Gutschein-Auszahlungen entworfen. Sie erstattet zuerst das ursprüngliche Budget, verteilt einen Überschuss in chronologischer Reihenfolge auf andere aktive Guthaben und fängt als letzte Möglichkeit den Rest auf, sodass kein Geld verloren geht. Erstattungen sind strikt pro Entität begrenzt, sodass die Erstattung eines Distributors nie in das Budget eines Unternehmens fließen kann. Unterstützt wird das durch einen Freigabeprozess für Auszahlungsanträge von Unternehmen und Distributoren.
- Datenbankmigrationen auf einem Live-System: Idempotente, transaktionale und umkehrbare Migrationen gegen Produktionsdaten geschrieben, darunter eine Datenreparatur-Migration, die fehlende Datensätze für Mitarbeitende nachtrug, die zu mehr als einem Unternehmen gehören, ohne bestehende Zeilen anzufassen.
- Datenmodellierung für mehrere Entitäten: Eine Zuordnung pro Beziehung eingeführt, sodass ein Mitarbeitender mehreren Unternehmen oder Distributoren angehören kann. Abfragen wurden von einem einzelnen Fremdschlüssel auf eine Pivot-Tabelle umgestellt. Das behob fehlerhafte Logins für Mitarbeitende in dieser Situation, im Web wie in der mobilen App.
- Zugriffskontrolle: Rollen- und Berechtigungszuweisungen in den Admin- und Unternehmens-Dashboards geprüft und korrigiert sowie richtlinienbasierte Autorisierung für Mitarbeitende, Distributoren, Gutscheine und Transaktionen ergänzt.
Technischer Stack
| Komponente | Technologien |
|---|---|
| Backend | PHP, Laravel |
| Datenbank | MySQL |
| API-Authentifizierung | Laravel Sanctum |
| Tests | PHPUnit |
| Frontend (Dashboards) | Blade |
Live-Plattform
Plattform ansehen: easygifte.com
Der Quellcode ist proprietär und kann nicht veröffentlicht werden. Diese Fallstudie beschreibt meine Beiträge, ohne vertraulichen Code, Zugangsdaten oder Unternehmens- und Mitarbeiterdaten offenzulegen.