SmartShop est une application backend développée avec Spring Boot qui gère :
- Les clients et leurs niveaux de fidélité (BASIC, SILVER, GOLD, PLATINUM).
- Les produits avec gestion de stock et suppression logique (soft delete).
- Les commandes avec calcul automatique des remises, TVA et montants.
- Les paiements multi-modes (espèces, chèque, virement) avec validation légale.
Ce projet est conçu comme un portfolio et une soutenance pour démontrer la maîtrise de Spring Boot, JPA/Hibernate, DTOs, Mappers, Tests unitaires et REST APIs.
- Java 17
- Spring Boot 3.x
- Spring Data JPA / Hibernate
- Spring Validation
- MapStruct (Entity ↔ DTO)
- Lombok
- JUnit 5 / Mockito
- MySQL (base principale)
- Cloner le projet avec Git.
- Configurer la base de données MySQL dans
application.properties(URL, username, password, dialect). - Lancer l’application avec Maven (
spring-boot:run). - L’API sera disponible sur
http://localhost:8080/api.
- Controller → expose les endpoints REST.
- Service → logique métier (remises, fidélité, paiements).
- Repository → accès aux données via JPA.
- Entity → modèles persistants.
- DTO → objets exposés via API.
- Mapper → conversion Entity ↔ DTO.
- POST
/api/admin/clients→ créer un client - GET
/api/admin/clients/{id}→ récupérer un client - GET
/api/admin/clients→ liste des clients - GET
/api/client/profile→ voire profile
- POST
/api/admin/products→ ajouter un produit - GET
/api/admin/products→ liste des produits actifs - DELETE
/api/admin/products/{id}→ suppression logique
- POST
/api/admin/commandes/{clientId}→ créer une commande - PUT
/api/admin/commandes/{id}→ modifier une commande (si non confirmée) - DELETE
/api/admin/commandes/{id}→ supprimer une commande (si non confirmée) - GET
/api/admin/commandes/{id}→ récupérer une commande
- POST
/api/admin/paiements/{commandeId}→ enregistrer un paiement - GET
/api/paiements/admin/commande/{commandeId}→ liste des paiements d’une commande
Les tests couvrent :
- ClientService → création et récupération de clients.
- ProductService → ajout, recherche et soft delete.
- CommandeService → calcul des remises, TVA, fidélité, update/delete restrictions.
- PaiementService → validation des paiements, mise à jour du montant restant, confirmation automatique des commandes.
- Une commande CONFIRMED ne peut pas être modifiée ni supprimée.
- Les paiements en espèces sont limités à 20 000 DH.
- Les paiements par chèque/virement commencent en statut EN_ATTENTE.
- La commande passe en CONFIRMED automatiquement quand montantRestant = 0.
- La fidélité est mise à jour après chaque commande confirmée :
- BASIC → SILVER : ≥ 3 commandes ou ≥ 1000 DH
- SILVER → GOLD : ≥ 10 commandes ou ≥ 5000 DH
- GOLD → PLATINUM : ≥ 20 commandes ou ≥ 15000 DH
Développé par Kaoutar – Backend Java Developer
Spécialisation : Spring Boot, JPA/Hibernate, REST APIs, Testing
