Skip to content

kooutar/SmartShop

Repository files navigation

🛒 SmartShop – Backend REST API

📖 Description

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.


⚙️ Technologies utilisées

  • Java 17
  • Spring Boot 3.x
  • Spring Data JPA / Hibernate
  • Spring Validation
  • MapStruct (Entity ↔ DTO)
  • Lombok
  • JUnit 5 / Mockito
  • MySQL (base principale)

📦 Installation & Exécution

  1. Cloner le projet avec Git.
  2. Configurer la base de données MySQL dans application.properties (URL, username, password, dialect).
  3. Lancer l’application avec Maven (spring-boot:run).
  4. L’API sera disponible sur http://localhost:8080/api.

📊 Architecture

  • 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.

Conception

img.png

🔑 Endpoints principaux

Clients

  • 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

Produits

  • POST /api/admin/products → ajouter un produit
  • GET /api/admin/products → liste des produits actifs
  • DELETE /api/admin/products/{id} → suppression logique

Commandes

  • 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

Paiements

  • POST /api/admin/paiements/{commandeId} → enregistrer un paiement
  • GET /api/paiements/admin/commande/{commandeId} → liste des paiements d’une commande

🧪 Tests unitaires

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.

📌 Règles métier importantes

  • 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

👩‍💻 Auteur

Développé par Kaoutar – Backend Java Developer
Spécialisation : Spring Boot, JPA/Hibernate, REST APIs, Testing

About

API backend de gestion commerciale : clients, produits, commandes, fidélité et paiements fractionnés, avec validation stock, calcul TVA, authentification HTTP Session et architecture en couches.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors