Microservice orchestrateur pour la gestion de recettes de cuisine. Il communique avec MS-Persistance via HTTP/REST pour toutes les opérations de persistance.
- Architecture
- Technologies
- Prérequis
- Installation
- Utilisation
- API Documentation
- Tests
- CI/CD
- Déploiement
Client (Postman/Frontend)
↓
MS-Recette (Port 8081)
- Orchestration
- Cache (Caffeine)
- Validation
- API REST publique
↓ HTTP
MS-Persistance (Port 8090)
- Gestion CRUD
- Accès base de données
- Persistance MySQL/MongoDB/MinIO
↓ JDBC
Bases de Données (MySQL 3307, MongoDB 27017, MinIO 9000)
| Fonctionnalité | MS-Recette | MS-Persistance |
|---|---|---|
| Endpoints publics | ✅ | ❌ |
| Cache | ✅ | ❌ |
| Validation | ✅ | ❌ |
| Communication HTTP | ✅ | ❌ |
| JDBC/JPA | ❌ | ✅ |
| Accès base de données | ❌ | ✅ |
- Java 21 - Langage de programmation
- Spring Boot 3.5.6 - Framework principal
- Spring Web - API REST
- RestTemplate - Client HTTP
- Caffeine Cache - Cache en mémoire
- Lombok - Réduction de code boilerplate
- SpringDoc OpenAPI - Documentation Swagger
- JaCoCo - Couverture de code
- JUnit 5 & Mockito - Tests unitaires
- Docker - Containerisation
- GitHub Actions - CI/CD
- Java 21 ou supérieur
- Maven 3.9+
- Docker & Docker Compose
- Git
git clone https://github.com/votre-repo/ms-recette.git
cd ms-recetteLe fichier .env contient les variables d'environnement :
SERVER_PORT=8081
MS_PERSISTANCE_URL=http://ms-persistance:8090
LOG_LEVEL_ROOT=INFO# Démarrer tous les services (MS-Recette + MS-Persistance + Bases de données)
docker-compose up -d
# Vérifier le statut
docker-compose ps
# Voir les logs
docker logs ms-recette-local --tail=50# Compiler le projet
mvn clean package -DskipTests
# Exécuter les tests
mvn test
# Générer le rapport de couverture
mvn test jacoco:report# MS-Recette
curl http://localhost:8081/actuator/health
# MS-Persistance
curl http://localhost:8090/actuator/health- MS-Recette : http://localhost:8081/swagger-ui.html
- MS-Persistance : http://localhost:8090/swagger-ui.html
- PhpMyAdmin (MySQL) : http://localhost:8085
- Mongo Express (MongoDB) : http://localhost:8082
- MinIO Console : http://localhost:9001
| Méthode | Endpoint | Description |
|---|---|---|
POST |
/api/recettes |
Créer une recette |
GET |
/api/recettes |
Liste toutes les recettes |
GET |
/api/recettes/{id} |
Récupérer une recette |
POST |
/api/recettes/search |
Rechercher des recettes |
GET |
/api/recettes/categorie/{categorie} |
Filtrer par catégorie |
GET |
/api/recettes/populaires |
Recettes populaires |
GET |
/api/recettes/recentes |
Recettes récentes |
PUT |
/api/recettes/{id} |
Mettre à jour une recette |
DELETE |
/api/recettes/{id} |
Supprimer une recette |
GET |
/api/recettes/{id}/exists |
Vérifier l'existence |
GET |
/api/recettes/{id}/stats |
Statistiques d'une recette |
POST http://localhost:8081/api/recettes
Content-Type: application/json
{
"titre": "Spaghetti Carbonara",
"description": "Recette italienne traditionnelle",
"tempsPreparation": 15,
"tempsCuisson": 20,
"nombrePersonnes": 4,
"difficulte": "FACILE",
"categorie": "PLAT_PRINCIPAL",
"ingredients": [
{
"alimentId": 1,
"quantite": 400.0,
"unite": "GRAMME"
}
]
}ENTREEPLAT_PRINCIPALDESSERTBOISSONAPERITIFACCOMPAGNEMENT
FACILEMOYENDIFFICILE
# Tous les tests
mvn clean test
# Tests unitaires seulement
mvn test -Dtest=RecetteServiceImplTest
# Tests d'intégration seulement
mvn test -Dtest=RecetteControllerTest
# Génération du rapport de couverture
mvn test jacoco:report- Tests Unitaires : 14 tests (RecetteServiceImplTest)
- Tests d'Intégration : 8 tests (RecetteControllerTest)
- Tests HomeController : 10 tests
- Total : 32 tests
- Objectif : ≥ 60%
- Rapport :
target/site/jacoco/index.html
# Vérifier la couverture
mvn jacoco:check
# Ouvrir le rapport
start target/site/jacoco/index.htmlLe projet utilise GitHub Actions pour l'intégration et le déploiement continus.
- build-maven.yml - Compilation Maven
- check-coverage.yml - Vérification couverture ≥ 60%
- build-docker-image.yml - Construction image Docker
- integration-tests.yml - Tests d'intégration
- sonar-analysis.yml - Analyse SonarQube
- deploy-kubernetes.yml - Déploiement K8s
Commit → Build → Tests → Coverage → Docker → Tests E2E → Deploy
# Extraire le pourcentage de couverture
mvn test jacoco:report
cat target/site/jacoco/index.html# Construire l'image
docker build -t ms-recette:latest .
# Exécuter le conteneur
docker run -p 8081:8081 ms-recette:latest# Démarrer tous les services
docker-compose up -d
# Arrêter les services
docker-compose down
# Voir les logs
docker-compose logs -f ms-recette
# Redémarrer un service
docker-compose restart ms-recetteSERVER_PORT=8081
MS_PERSISTANCE_URL=http://ms-persistance:8090
LOG_LEVEL_ROOT=INFO
USERNAME=VotreNom
USEREMAIL=[email protected]# Appliquer les manifests
kubectl apply -f k8s/
# Vérifier le déploiement
kubectl get pods
kubectl get services
# Voir les logs
kubectl logs -f deployment/ms-recette# Créer l'application
kubectl apply -f argocd-app.yaml
# Synchroniser
argocd app sync ms-recette- Architecture détaillée :
GUIDE-DEVELOPPEUR.md - Guide ArgoCD :
ARGOCD-QUICKREF.md
- Fork le projet
- Créer une branche (
git checkout -b feature/AmazingFeature) - Commit les changements (
git commit -m 'Add AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
Ce projet est sous licence MIT.
- Abdelmoughit - [email protected]
Erreur :
X Exiting due to GUEST_IMAGE_LOAD: Failed to load image
blob sha256:... not found
Solution :
Utiliser docker save/load au lieu de minikube image load :
docker pull abdboutchichi/ms-persistance:latest
docker save abdboutchichi/ms-persistance:latest -o /tmp/ms-persistance.tar
eval $(minikube docker-env)
docker load -i /tmp/ms-persistance.tarVoir FIX-MINIKUBE-IMAGE-LOAD.md pour plus de détails.
Solution :
# Vérifier les exclusions JaCoCo dans pom.xml
# Classes exclues : config, request, response, exception, model
mvn clean test jacoco:reportSolution :
# Vérifier que MS-Persistance et MS-Recette sont UP
curl http://localhost:8090/actuator/health
curl http://localhost:8081/actuator/health
# Créer les données de test
cd tests/newman
npm install
npm testPour toute question ou problème :
- Ouvrir une issue sur GitHub
- Contacter l'équipe de développement
- Consulter FIX-MINIKUBE-IMAGE-LOAD.md
🎉 MS-Recette - Microservice de Gestion de Recettes