API REST Spring Boot pour la gestion d'une plateforme de livraison : livreurs, commandes, courses, paie, charges et reporting.
- Aperçu
- Technologies
- Prérequis
- Installation
- Configuration
- Lancer l'application
- Docker
- Documentation API
- Architecture
- Domaines métier
- Tests
- Déploiement
Turbo Delivery Backend est une application Spring Boot 3.3 (Java 21) exposant une API REST pour :
- La gestion des livreurs (profils, planning, présence, performance)
- Le traitement des commandes et courses avec suivi en temps réel (WebSocket)
- Le calcul de la paie (charges fixes/variables, avances, déductions)
- La gestion des files d'attente restaurant et la coordination des livraisons
- La génération de rapports PDF/Excel via JasperReports
- L'envoi de notifications SMS (Twilio) et WebSocket
- L'intégration Google Maps pour le calcul des distances et trajets
| Catégorie | Technologie | Version |
|---|---|---|
| Langage | Java | 21 |
| Framework | Spring Boot | 3.3.7 |
| Base de données | PostgreSQL | 42.7.10 |
| Cache | Redis | (Jedis) |
| Authentification | JWT (jjwt) | 0.11.5 |
| ORM | Spring Data JPA / Hibernate | — |
| Requêtes dynamiques | QueryDSL (Jakarta) | — |
| Mapping | MapStruct | 1.5.2 |
| WebSocket | Netty-SocketIO | 2.0.12 |
| SMS | Twilio | 10.6.4 |
| Géolocalisation | Google Maps Services | 2.2.0 |
| Reporting | JasperReports | 7.0.6 |
| Documentation API | SpringDoc OpenAPI (Swagger) | 2.3.0 |
| Build | Maven | 3.9+ |
| Conteneurisation | Docker (multi-stage, Alpine JRE 21) | — |
- Java 21 (JDK)
- Maven 3.9+
- PostgreSQL (base
turbo-delivery) - Redis (port 6379)
- (Optionnel) Docker & Docker Compose
git clone https://github.com/Lunion-Lab/turbo-delivery-backend.git
cd turbo-delivery-backend
mvn clean install -DskipTestsLes fichiers de configuration se trouvent dans src/main/resources/ :
| Fichier | Profil | Description |
|---|---|---|
application.yml |
défaut | Configuration principale (DB, Redis, Twilio, logs) |
application-dev.properties |
dev |
Port 8081, base de test turbodeliverytest, logs DEBUG |
application-prod.properties |
production |
Port 8081, base prod turbo-delivery, logs INFO |
# PostgreSQL
spring.datasource.url=jdbc:postgresql://<host>:5432/turbo-delivery
spring.datasource.username=<user>
spring.datasource.password=<password>
# Redis
spring.data.redis.host=<host>
spring.data.redis.port=6379
# JWT
app.jwt.secret=<secret>
# Twilio (SMS)
twilio.account-sid=<sid>
twilio.auth-token=<token>
twilio.phone-number=<number>
# Google Maps
google.maps.api-key=<key>mvn spring-boot:run -Dspring-boot.run.profiles=devmvn spring-boot:run -Dspring-boot.run.profiles=productionLe serveur démarre sur le port 8080 (défaut) ou 8081 selon le profil actif.
docker build -t turbo-delivery-backend .docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL=jdbc:postgresql://<host>:5432/turbo-delivery \
-e SPRING_DATASOURCE_USERNAME=<user> \
-e SPRING_DATASOURCE_PASSWORD=<password> \
-e SPRING_DATA_REDIS_HOST=<host> \
turbo-delivery-backendLe
Dockerfileutilise un build multi-étapes : compilation avecmaven:3.9-eclipse-temurin-21, exécution avececlipse-temurin:21-jre-alpinepour une image minimale.
Une fois l'application démarrée, la documentation Swagger est disponible à :
http://localhost:8080/swagger-ui.html
Le projet suit une architecture en couches inspirée du Clean Architecture et du pattern Port-Adapter :
com.lunionlab.turbo/
├── adapters/ → Adaptateurs vers services externes (Twilio, Google Maps, Paiement)
├── config/ → Configuration Spring (Security, Redis, WebSocket, Swagger)
├── converters/ → Convertisseurs de types
├── dto/ → Data Transfer Objects (40+)
├── entities/ → Entités JPA (45+ tables)
├── enums/ → Énumérations métier
├── events/ → Gestion des événements applicatifs
├── exceptions/ → Gestion centralisée des erreurs
├── jobs/ → Tâches planifiées (Dépenses, Facturation, Présence)
├── mappers/ → Mappeurs MapStruct
├── objetvaleur/ → Value objects du domaine
├── port/ → Interfaces ports (21 ports)
├── queries/ → Requêtes personnalisées & logique Jasper
├── repositories/ → Repositories JPA (40+)
├── resources/ → Contrôleurs REST
│ ├── livreur/ → 18 ressources livreurs
│ ├── restaurant/ → 10 ressources restaurants
│ ├── erp/ → 31 ressources ERP
│ └── client/ → Notifications clients
├── services/ → Services métier (40+)
├── usecase/ → Cas d'utilisation
├── utilitaires/ → Fonctions utilitaires
└── vm/ → View models
| Domaine | Description |
|---|---|
| Livreur | Gestion du personnel de livraison : profil, planning, audit, performance |
| Commande | Commandes externes avec suivi de statut et association client |
| Course | Missions de livraison assignées aux livreurs, avec notifications temps réel |
| Paie | Calcul de salaires : charges fixes/variables, avances, déductions |
| Charge | Dépenses fixes et variables par période et catégorie |
| EmploiTemps | Plannings journaliers, suivi des heures et disponibilité |
| FileAttente | Gestion de la file d'attente de livraison (actif, archive, historique) |
| Contestation | Gestion des litiges de paiement et de livraison |
| Facture | Génération et suivi des factures |
| Notification | Notifications multi-canal : SMS (Twilio), WebSocket, Email |
# Tous les tests
mvn test
# Profil dev (base H2 in-memory)
mvn test -Dspring.profiles.active=devLes tests utilisent une base H2 in-memory avec Mockito pour l'isolation des dépendances.
Voir docs/deploy.md pour les instructions complètes de déploiement en production.
Le déploiement en production utilise un service systemd (turbobackend-prod.service) piloté par un pipeline GitHub Actions :
- Exécution sous utilisateur non-root (
deployer) - Redémarrage automatique en cas d'échec
- JVM configurée :
-Xmx500m -Xms256m - Logs via
journald - Répertoire de déploiement :
/var/www/turbo/prod/backend/
Propriétaire — © Lunion Lab. Tous droits réservés.