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.
RestController
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.
Le diagramme suivant décrit les principales actions attendues dans le système.
Le diagramme de classes suivant vous aide à identifier les principales classes métier et techniques.
Le projet s’appuie sur 5 tables.
Ce mini-projet a pour objectif une mise en pratique des notions suivantes :
Vous devez développer la partie back-end complète de l’application.
L’application doit permettre au minimum de gérer les éléments suivants (le CRUD) :
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 :
ligne_commande
commande_id
produit_id
Autrement dit :
Vous devrez mettre en place une modélisation avec une classe de clé composite, par exemple LigneCommandeId et une entité LigneCommande.
LigneCommandeId
LigneCommande
Une implémentation classique attendue est basée sur :
@Embeddable
@EmbeddedId
@MapsId
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.
Le projet doit être réalisé avec :
Les scripts SQL de création et d’initialisation vous sont fournis.
Le modèle relationnel repose sur les tables suivantes :
categorie
produit
client
commande
(commande_id, produit_id)
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.
Vous devez au minimum créer les entités suivantes :
Categorie
Produit
Client
Commande
BigDecimal
Double
LocalDate
Integer
Long
Vous devez créer un repository pour chaque entité principale :
CategorieRepository
ProduitRepository
ClientRepository
CommandeRepository
LigneCommandeRepository
Ces repositories devront au minimum permettre les opérations CRUD de base et quelques recherches simples utiles aux contrôleurs.
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.
CategorieService
ProduitService
ClientService
CommandeService
LigneCommandeService
Vous devez mettre en place des contrôleurs Spring MVC qui permettent à l’IHM Thymeleaf fournie d’interagir avec la couche métier.
CategorieRestController
ProduitRestController
ClientRestController
CommandeRestController
LigneCommandeRestController
Ces contrôleurs devront permettre :
Votre projet ne doit pas se limiter à un simple CRUD mécanique.
Le montant total (avec annotation @Transient) d’une commande doit être recalculé à partir de ses lignes :
@Transient
montant_total = somme(quantite × prix_unitaire)
Lorsqu’une ligne de commande est ajoutée :
Lorsqu’une ligne est supprimée ou modifiée :
Il doit être impossible d’ajouter une ligne de commande si :
Dans ce cas, vous pouvez lever une exception métier dédiée.
Le flux attendu est le suivant :
Vous devez prévoir une implémentation robuste :
RessourceNotFoundException
StockInsuffisantException
Vous devez configurer le projet avec :
application.yml
application.properties
pom.xml
spring-boot-starter-web
spring-boot-starter-thymeleaf
spring-boot-starter-data-jpa
postgresql
spring-boot-starter-validation
spring-boot-devtools
À partir du sujet, des diagrammes et des scripts SQL :
Repository
À la fin du mini-projet, l’utilisateur doit pouvoir :
Le tout dans une architecture Spring Boot propre, connectée à PostgreSQL, exploitant les couches :
Travaillez dans cet ordre :
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).