Ce projet utilise une architecture microservices pour gérer différentes fonctionnalités liées à Breizhsport. L'application est composée de trois services distincts :
- auth_service : Gestion des utilisateurs (inscription, authentification, validation de jeton).
- product_service : Gestion des produits et du panier.
- frontend_service : Interface utilisateur pour afficher les produits.
L'ensemble du projet est conteneurisé avec Docker, ce qui facilite le déploiement et les tests en local.
- Docker et Docker Compose doivent être installés sur votre machine.
- Python 3.10 ou plus récent.
CESI_Superviser_dev_app/
├── auth_service/
│ ├── Dockerfile
│ ├── main.py
│ ├── requirements.txt
│ └── test_auth_service.py
├── product_service/
│ ├── Dockerfile
│ ├── main.py
│ ├── requirements.txt
│ └── test_product_service.py
├── frontend_service/
│ ├── Dockerfile
│ ├── main.py
│ ├── templates/
│ │ └── index.html
│ ├── requirements.txt
│ └── test/test_app.py
└── docker-compose.yml
-
Clonez le dépôt :
git clone https://github.com/votre-utilisateur/CESI_Superviser_dev_app.git cd CESI_Superviser_dev_app
-
Construisez les images Docker et démarrez les conteneurs :
docker compose up --build
Cette commande démarre les services
auth_service
,product_service
,frontend_service
ainsi que MongoDB.
L'interface utilisateur est accessible à l'adresse suivante :
http://localhost:8000
Vous pouvez exécuter des tests pour chaque service individuellement en utilisant les commandes suivantes :
docker compose run --rm auth_service pytest
docker compose run --rm auth_service pytest /app/test.py
docker compose run --rm product_service pytest
docker compose run --rm product_service/app/test/test_main.py
docker compose run --rm frontend_service pytest
- auth_service : Vérifie l'inscription et l'authentification des utilisateurs.
- product_service : Vérifie la gestion des produits et du panier.
- frontend_service : Vérifie que la page d'accueil affiche correctement les produits.
Pour arrêter tous les services et nettoyer les conteneurs, utilisez la commande suivante :
docker compose down
docker compose down --volumes --rmi all
Pour visualiser les bases de données authdb
et productdb
avec l'extension MongoDB de VS Code, suivez les étapes ci-dessous :
- Ouvrez l'extension MongoDB dans VS Code.
- Cliquez sur le bouton
+
pour ajouter une nouvelle connexion. - Sélectionnez "Open Form" pour entrer l'URL de connexion manuellement.
- Utilisez les URL suivantes pour chaque base de données :
- authdb :
mongodb://localhost:27017/authdb
- productdb :
mongodb://localhost:27018/productdb
- authdb :
- Cliquez sur "Connect" pour vous connecter à chaque base de données.
Si vous rencontrez des problèmes avec Docker, essayez de reconstruire les conteneurs :
docker compose up --build --force-recreate
docker exec -it mongo-auth bash
mongosh
use authdb;
db.users.find();
db.users.find().pretty();
docker exec -it mongo-product bash
mongosh
use productdb;
db.products.find();
db.products.find().pretty();
request postman
Health check [GET]
http://localhost:8001/health
Exemple de retour : { "auth_service": true }
Product detail [GET]
http://localhost:8002/products/{id}
{id} = "id": "675f0aeb846059bec45617dc" de products
return Example : { "product": { "description": "Comfortable running sneakers for everyday use.", "id": "675f0aeb846059bec45617dc", "image": "/products/675f0aeb846059bec45617dc/image", "name": "Running Sneakers", "price": 79.99, "storage_quantity": 120 } }
Product image [GET]
http://localhost:8002/products/{id}/image
{id} = "id": "675c5d38e4de3534ea4800dc" de products
Retrun display image
All products[GET]
http://localhost:8002/products
Return Example : { "products": [ { "description": "Comfortable running sneakers for everyday use.", "id": "675f0aeb846059bec45617dc", "image": "/products/675f0aeb846059bec45617dc/image", "name": "Running Sneakers", "price": 79.99, "storage_quantity": 120 }, { "description": "Comfortable Jogging for everyday use.", "id": "675f0aeb846059bec45617dd", "image": "/products/675f0aeb846059bec45617dd/image", "name": "Jogging", "price": 79.99, "storage_quantity": 120 } ] }
Sign up [POST]
http://localhost:8001/auth/signup
body: { "username": "user", "email": "user@example.com", "password": "password" } return : { "message": "User created successfully" }
Login [POST]
http://localhost:8001/auth/login
body: { "username": "user", "password": "password" } return example : { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNjc1YzVkNjY1NzgzYWEwODZhYTA5MTg5In0.eCXmxQ5S2cv0h2Of1l6x5MBWZwxwZ41MaHAxsGonJZI" }
Validate token [GET]
http://localhost:8001/auth/validate
Headers: Key: Authorization = token
Add product to cart [POST]
http://localhost:8002/cart
Body: { "product_id": "{id}", "quantity": 1 } example: { "id_product": "675f0aeb846059bec45617dc", "quantity": 1 } {id} = id product
return : { "message": "Product added to cart" }
Headers: Key: Authorization = token
Get cart [GET]
http://localhost:8002/cart
Headers:
Key: Authorization = token
return Example :
{ "cart": [ { "product": { "description": "Comfortable running sneakers for everyday use.", "id": "675f0aeb846059bec45617dc", "image": "/products/675f0aeb846059bec45617dc/image", "name": "Running Sneakers", "price": 79.99 }, "quantity": 2, "total_price": 159.98 } ] }