🛢️Parcours Fioul GroupéSpring Boot · Chapitre 08
Accueil › Spring Boot › Chapitre 08
Chapitre 08 / 19 · projet

Projet — la couche Services

On écrit la vraie logique métier du fioul groupé : rejoindre une campagne, calculer le volume et le palier de prix, appliquer les règles de gestion.

1 Étape

Rejoindre une campagne

Le service ajoute une commande à la campagne (le $push vu côté Mongo), après vérifications.

public CampagneDTO rejoindre(String id, CreerCommandeDTO dto) {
    Campagne c = repo.findById(id)
        .orElseThrow(() -> new CampagneIntrouvable(id));
    if (c.getStatut() != Statut.OUVERTE)
        throw new CampagneFermee(id);
    c.getCommandes().add(new Commande(dto.litres(), dto.commune(), dto.adresse()));
    repo.save(c);
    return versDTO(c);
}
2 Étape

Calculer volume & palier de prix

On somme les litres, puis on choisit le palier du fournisseur — la logique de l'agrégation Mongo, ici en Java.

private BigDecimal calculerPrix(int volume, Fournisseur f) {
    return f.getPaliers().stream()
        .filter(p -> volume >= p.volumeMin())
        .max(Comparator.comparingInt(Palier::volumeMin))
        .map(Palier::prixLitre)
        .orElse(f.getPrixBase());
}
3 Notion

Les règles de gestion

4 Étape

Le mapping entité → DTO

C'est le service qui calcule volumeTotal et prixLitre pour remplir le DTO exposé.

🛢️ Sur le projet Fioul Groupé

Écris listerOuvertes, consulter, rejoindre, cloturer et calculerPrix. Ajoute des exceptions métier (CampagneIntrouvable, CampagneFermee) reliées aux codes 404/409 du chapitre 5.

À retenir
  • La logique vit dans le service : rejoindre, calculer, valider les règles.
  • Le calcul du palier reprend l'agrégation Mongo, en Java.
  • Exceptions métier → codes HTTP via le @RestControllerAdvice.
← Chapitre 07