Aller au contenu

Mini-projet Spring Boot – La Chocolaterie de Pâques

Contexte

Vous travaillez pour La Maison du Cacao Royal, une chocolaterie française de grande renommée située à Mer.

À l’approche de Pâques 2027, l’entreprise souhaite disposer d’une application web de gestion pour suivre :

L’entreprise souhaite désormais une application construite avec Spring Boot, Maven, Spring Data JPA, PostgreSQL, Thymeleaf et des contrôleurs.

La partie interface web Thymeleaf vous est fournie car le cours est prévu la semaine 5a. Votre travail consiste donc à développer la partie back-end métier et technique avec les RestController permettant à l’application de fonctionner correctement.

Le projet doit respecter une architecture claire en couches (MVC) :

Le sujet d’origine portait sur une application Java console utilisant JDBC, DAO, Singleton et menu texte. Ici, ce sujet est adapté en version Spring Boot web, avec une séparation nette des responsabilités et une base PostgreSQL.


Diagramme de cas d’utilisation (Use Case)

Le diagramme suivant décrit les principales actions attendues dans le système.

use case


Diagramme de classes UML

Le diagramme de classes suivant vous aide à identifier les principales classes métier et techniques.

use case


MCD / Schéma relationnel

Le projet s’appuie sur 5 tables.

use case


1. Objectifs

Ce mini-projet a pour objectif une mise en pratique des notions suivantes :


2. Travail demandé

Vous devez développer la partie back-end complète de l’application.

Ce qui vous est fourni

Ce que vous devez produire


3. Contraintes fonctionnelles

L’application doit permettre au minimum de gérer les éléments suivants (le CRUD) :

3.1 Gestion des catégories

3.2 Gestion des produits

3.3 Gestion des clients

3.4 Gestion des commandes

3.5 Gestion des lignes de commande


4. Point métier important : clé primaire composite

Une ligne de commande n’a pas besoin d’un identifiant artificiel séparé.

Dans ce projet, la table ligne_commande doit utiliser une clé primaire composite composée de :

Autrement dit :

Conséquence côté JPA

Vous devrez mettre en place une modélisation avec une classe de clé composite, par exemple LigneCommandeId et une entité LigneCommande.

Une implémentation classique attendue est basée sur :


5. Architecture attendue du projet

Une organisation possible est la suivante :

src/main/java/
└── fr/chocolaterie/
    ├── ChocolaterieApplication.java
    ├── controller/
    │   ├── CategorieRestController.java
    │   ├── ProduitRestController.java
    │   ├── ClientRestController.java
    │   ├── CommandeRestController.java
    │   └── LigneCommandeRestController.java
    ├── entity/
    │   ├── Categorie.java
    │   ├── Produit.java
    │   ├── Client.java
    │   ├── Commande.java
    │   ├── LigneCommande.java
    │   └── LigneCommandeId.java
    ├── repository/
    │   ├── CategorieRepository.java
    │   ├── ProduitRepository.java
    │   ├── ClientRepository.java
    │   ├── CommandeRepository.java
    │   └── LigneCommandeRepository.java
    ├── service/
    │   ├── CategorieService.java
    │   ├── ProduitService.java
    │   ├── ClientService.java
    │   ├── CommandeService.java
    │   └── LigneCommandeService.java
    └── exception/
        ├── RessourceNotFoundException.java
        ├── StockInsuffisantException.java
        └── GlobalExceptionHandler.java

src/main/resources/
├── application.yml
├── schema.sql
├── data.sql
└── templates/
    └── ... fichiers Thymeleaf fournis ...

Vous devez impérativement structurer votre code autour des couches Entity, Repository, Service et Controller.


6. Technologies imposées

Le projet doit être réalisé avec :


7. Base de données PostgreSQL

Les scripts SQL de création et d’initialisation vous sont fournis.

7.1 Tables du projet

Le modèle relationnel repose sur les tables suivantes :

7.2 Relations attendues

7.3 Scripts fournis

Vous devrez utiliser les scripts PostgreSQL fournis pour :

Vous n’avez pas besoin de réinventer le modèle SQL.
Le schéma relationnel et le jeu de données de départ sont imposés.


8. Entités attendues

Vous devez au minimum créer les entités suivantes :

Exemples de relations attendues

Remarques importantes


9. Repositories attendus

Vous devez créer un repository pour chaque entité principale :

Ces repositories devront au minimum permettre les opérations CRUD de base et quelques recherches simples utiles aux contrôleurs.

Exemples de méthodes possibles


10. Services attendus

La couche service est obligatoire.

Elle doit contenir la logique métier de l’application et éviter de placer cette logique directement dans les contrôleurs.

Exemples de responsabilités de la couche service

Services attendus


11. Contrôleurs attendus

Vous devez mettre en place des contrôleurs Spring MVC qui permettent à l’IHM Thymeleaf fournie d’interagir avec la couche métier.

Contrôleurs minimum attendus

Ces contrôleurs devront permettre :


12. Logique métier indispensable

Votre projet ne doit pas se limiter à un simple CRUD mécanique.

Vous devez implémenter au minimum les règles métier suivantes :

12.1 Calcul du montant total d’une commande

Le montant total (avec annotation @Transient) d’une commande doit être recalculé à partir de ses lignes :

12.2 Mise à jour du stock

Lorsqu’une ligne de commande est ajoutée :

Lorsqu’une ligne est supprimée ou modifiée :

12.3 Contrôle du stock

Il doit être impossible d’ajouter une ligne de commande si :

Dans ce cas, vous pouvez lever une exception métier dédiée.

12.4 Navigation logique dans l’IHM

Le flux attendu est le suivant :

  1. création d’une commande
  2. redirection vers son détail
  3. ajout d’un ou plusieurs produits à cette commande
  4. affichage du total recalculé.

13. Validation et robustesse

Vous devez prévoir une implémentation robuste :

Exemples d’exceptions utiles


14. Configuration attendue

Vous devez configurer le projet avec :

Exemples de dépendances attendues dans le pom.xml


15. Travail demandé pas à pas

Partie 1 – Analyse

À partir du sujet, des diagrammes et des scripts SQL :

  1. identifier les classes métier
  2. identifier les relations entre entités
  3. repérer les cardinalités
  4. identifier les repositories à créer
  5. repérer les traitements métier à centraliser dans les services.

Partie 2 – Mise en place du projet

  1. créer le projet Spring Boot Maven
  2. ajouter les dépendances
  3. configurer PostgreSQL dans application.yml
  4. intégrer les scripts SQL fournis.

Partie 3 – Développement du modèle

  1. créer les entités
  2. gérer les relations JPA
  3. implémenter la clé composite de LigneCommande.

Partie 4 – Développement de la persistance

  1. créer les interfaces Repository
  2. tester l’accès aux données
  3. vérifier la cohérence du mapping.

Partie 5 – Développement métier

  1. créer les services
  2. implémenter les règles métier
  3. gérer le calcul du total
  4. gérer le stock
  5. traiter les erreurs métier.

Partie 6 – Développement web

  1. créer les contrôleurs
  2. brancher les vues Thymeleaf fournies
  3. permettre les opérations CRUD
  4. permettre la création d’une commande puis l’ajout de produits à cette commande.

16. Livrables attendus


17. Critères à respecter


18. Résultat attendu

À la fin du mini-projet, l’utilisateur doit pouvoir :

Le tout dans une architecture Spring Boot propre, connectée à PostgreSQL, exploitant les couches :


19. Conseil de méthode

Travaillez dans cet ordre :

  1. base de données PostgreSQL
  2. entités
  3. repositories
  4. services
  5. contrôleurs (les contrôleurs seront à compléter)
  6. intégration des vues Thymeleaf (ultérieurement)

Dans ce projet, les écrans sont déjà fournis : c’est le moteur qui doit être construit. Je vous donnerai les pages Thymeleaf pour la partie Front (à compléter ou pas, selon ce que l’on verra).