0% ont trouvé ce document utile (0 vote)
7 vues7 pages

API REST pour Gestion d'Assurances avec Spring

Le projet consiste à développer une API REST pour un système de gestion d'assurances pour la compagnie 'SecureLife', utilisant Spring Boot 3.5.6 et PostgreSQL. Il inclut des fonctionnalités pour gérer les contrats d'assurance automobile, habitation et vie, avec des exigences fonctionnelles et techniques précises, ainsi que des règles de validation et des contraintes importantes. Les livrables attendus comprennent le code source, la base de données, la documentation et des tests.

Transféré par

Muhamad Lamine Niassy
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues7 pages

API REST pour Gestion d'Assurances avec Spring

Le projet consiste à développer une API REST pour un système de gestion d'assurances pour la compagnie 'SecureLife', utilisant Spring Boot 3.5.6 et PostgreSQL. Il inclut des fonctionnalités pour gérer les contrats d'assurance automobile, habitation et vie, avec des exigences fonctionnelles et techniques précises, ainsi que des règles de validation et des contraintes importantes. Les livrables attendus comprennent le code source, la base de données, la documentation et des tests.

Transféré par

Muhamad Lamine Niassy
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Makhmadane LO

Lead Senior Développer / Cloud / Ops

Partie 1 : Système de Gestion d'Assurances


Avec Spring Boot 3.5.6

🎯 Objectifs Pédagogiques
À la fin de ce projet, vous devez être capable de :
• Concevoir et développer une API REST complète avec Spring Boot
• Implémenter une architecture en couches propre et maintenable
• Gérer la persistance des données avec JPA/Hibernate
• Appliquer les bonnes pratiques de développement backend
• Documenter une API avec OpenAPI/Swagger
• Gérer les erreurs et valider les données
• Mettre en œuvre des design patterns professionnels

📖 Contexte du Projet
La compagnie d'assurances "SecureLife" souhaite moderniser son système
d'information en développant une plateforme web pour gérer ses contrats d'assurance.
La première phase consiste à développer le backend sous forme d'API REST.
La compagnie propose trois types d'assurances :

🚗 Assurance Automobile
• Protège les véhicules contre les dommages et accidents
• Informations : immatriculation, puissance fiscale, coefficient bonus-malus
• Calcul de prime basé sur la puissance du véhicule et l'historique

🏠 Assurance Habitation
• Couvre les logements contre les sinistres
• Informations : adresse, superficie, zone à risque
• Calcul de prime basé sur la superficie et l'exposition aux risques

👤 Assurance Vie
• Garantit un capital en cas de décès de l'assuré
• Informations : âge de l'assuré, capital garanti, bénéficiaire
• Calcul de prime basé sur l'âge et le montant du capital

Interne
Makhmadane LO
Lead Senior Développer / Cloud / Ops

📋 Exigences Fonctionnelles
1. Gestion des Contrats
Votre système doit permettre de :
Créer un nouveau contrat d'assurance (Auto, Habitation ou Vie)
Consulter les détails d'un contrat
Modifier les informations d'un contrat existant
Supprimer un contrat
Lister tous les contrats avec pagination
Rechercher des contrats selon différents critères

2. Informations Communes
Chaque contrat doit contenir :
• Un numéro de contrat unique (généré automatiquement)
• Le nom complet du client
• L'adresse email du client
• Une cotisation mensuelle de base
• Une prime annuelle (calculée automatiquement)
• Un statut (ACTIVE, SUSPENDED, CANCELLED, EXPIRED)
• Les dates de création et de dernière modification

3. Calcul des Primes


Le système doit calculer automatiquement la prime annuelle selon des formules
spécifiques à chaque type d'assurance. Vous devez concevoir ces formules de manière
cohérente et réaliste.

4. Recherche et Filtrage
Les utilisateurs doivent pouvoir rechercher des contrats selon :
• Le nom du client (recherche partielle, insensible à la casse)
• L'adresse email du client
• Le type d'assurance
• Le statut du contrat
• Une fourchette de primes (min-max)

5. Gestion des Statuts


Le système doit permettre de changer le statut d'un contrat :
• ACTIVE → SUSPENDED
• ACTIVE → CANCELLED
• SUSPENDED → ACTIVE
• SUSPENDED → CANCELLED

Interne
Makhmadane LO
Lead Senior Développer / Cloud / Ops

6. Statistiques
Fournir des endpoints pour obtenir :
• Le nombre total de contrats par statut
• Le chiffre d'affaires total (somme des primes annuelles)

🛠️ Exigences Techniques
Stack Technologique Imposée
Technologie Version Usage

Java 17 Langage de programmation

Spring Boot 3.5.6 Framework backend

PostgreSQL 15+ Base de données

Maven 3.8+ Gestion des dépendances

Lombok Latest Réduction du boilerplate

MapStruct Latest Mapping objet-objet

SpringDoc OpenAPI 2.8.5 Documentation API

Architecture Obligatoire
Votre projet DOIT respecter l'architecture en couches suivante :
entity/ → Entités JPA dto/request/ → DTOs pour les entrées dto/response/ → DTOs pour les sorties
dto/filter/ → DTOs pour les filtres mapper/ → Interfaces MapStruct repository/ → Interfaces JPA Repository
specification/ → JPA Specifications service/ → Logique métier resource/ → Contrôleurs REST exception/ →
Gestion des erreurs config/ → Configurations Spring

🔑 Concepts à Mettre en Œuvre


Votre projet DOIT obligatoirement utiliser :

1. Spring Boot & Configuration


@SpringBootApplication
@Configuration et @Bean
Fichier [Link]
Spring Boot DevTools

Interne
Makhmadane LO
Lead Senior Développer / Cloud / Ops

2. JPA / Hibernate
@Entity, @Table, @Id, @GeneratedValue, @Column
Héritage d'entités (stratégie à choisir)
@PrePersist et @PreUpdate
JpaRepository pour CRUD
Méthodes dérivées (findByEmail, existsByEmail)
JPA Specifications pour filtrage dynamique

3. API REST
@RestController, @RequestMapping
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping,
@PatchMapping
@PathVariable, @RequestParam, @RequestBody
ResponseEntity avec codes HTTP (200, 201, 204, 400, 404, 409)
Versioning d'API (/api/v1 et /api/v2)

4. Validation
@Valid sur les paramètres
@NotNull, @NotBlank, @Email, @Min, @Max
Messages d'erreur personnalisés

5. DTOs
Séparation Request / Response
DTO pour les filtres de recherche
PageResponse générique

6. Mapping
MapStruct avec @Mapper
Configuration annotation processor Maven
Mappings personnalisés avec @Mapping

7. Pagination & Tri


Utilisation de Pageable
Paramètres : page, size, sortBy, direction
Métadonnées de pagination dans la réponse

8. Gestion des Exceptions


@RestControllerAdvice
@ExceptionHandler

Interne
Makhmadane LO
Lead Senior Développer / Cloud / Ops

Exceptions personnalisées (ResourceNotFoundException,


DuplicateResourceException)
Gestion des erreurs de validation

9. Logging
SLF4J avec @Slf4j (Lombok)
Logs dans services et contrôleurs

10. Documentation
Swagger/OpenAPI
@Tag, @Operation, @Parameter
Configuration personnalisée

11. Injection de Dépendances


Constructor Injection avec @RequiredArgsConstructor
Interfaces pour les services

12. Lombok
@Data, @Builder, @NoArgsConstructor, @AllArgsConstructor
@Slf4j pour le logging

13. Transactions
@Transactional sur les méthodes de service

📊 Fonctionnalités Minimales Requises


Endpoints à Implémenter
Méthode Endpoint Description Code

POST /api/v1/insurances/auto Créer auto 201

POST /api/v1/insurances/home Créer habitation 201

POST /api/v1/insurances/life Créer vie 201

GET /api/v1/insurances/{id} Récupérer par ID 200

GET /api/v1/insurances Lister (paginated) 200

GET /api/v1/insurances/search Rechercher 200

PUT /api/v1/insurances/auto/{id} Modifier auto 200

PATCH /api/v1/insurances/{id}/status Changer statut 202

Interne
Makhmadane LO
Lead Senior Développer / Cloud / Ops

Méthode Endpoint Description Code

DELETE /api/v1/insurances/{id} Supprimer 204

GET /api/v1/insurances/stats Statistiques 200

✅ Règles de Validation
Pour Tous les Contrats
• Nom du client : obligatoire, non vide
• Email : obligatoire, format valide
• Prime de base : obligatoire, strictement positive

Pour l'Assurance Auto


• Immatriculation : obligatoire, unique
• Puissance : obligatoire, entre 1 et 50 CV
• Bonus/Malus : obligatoire, entre 50% et 350%

Pour l'Assurance Habitation


• Adresse : obligatoire, non vide
• Superficie : obligatoire, minimum 10 m²
• Zone à risque : obligatoire

Pour l'Assurance Vie


• Âge : obligatoire, entre 18 et 80 ans
• Capital garanti : obligatoire, minimum 10 000€
• Bénéficiaire : obligatoire, non vide

🚫 Règles Métier
• Unicité : Un email ne peut être associé qu'à un seul contrat actif
• Unicité : Une plaque d'immatriculation ne peut être assurée qu'une fois
• Génération : Le numéro de contrat doit être généré automatiquement
• Calcul : Les primes doivent être recalculées à chaque modification
• Horodatage : Les dates doivent être gérées automatiquement

🚫 Redis Cache
Pour améliorer les performances du système "SecureLife" et réduire la charge sur la
base de données PostgreSQL, vous devez intégrer Redis comme couche de cache.
Cette optimisation est cruciale car :

Interne
Makhmadane LO
Lead Senior Développer / Cloud / Ops

• Les consultations de contrats sont fréquentes


• Les statistiques sont calculées régulièrement
• La recherche par critères est intensive
• Certaines données (types d'assurance, zones à risque) changent rarement

📦 Livrables Attendus
• Code Source : Projet Maven complet avec architecture en couches
• Base de Données : Script SQL avec Flyway ou données de test
• Documentation : [Link] + Swagger accessible
• Tests : Collection Postman ou fichier .http (min 10 requêtes)
• Rapport Technique : PDF avec architecture, modèle de données, choix
techniques

⚠️ Contraintes Importantes
• Interdit : Spring Data REST (génération automatique endpoints)
• Pas de frontend : Focus uniquement sur le backend
• Obligatoire : Tous les concepts listés
• Obligatoire : L'application doit démarrer sans erreur
• Obligatoire : PostgreSQL comme base de données
• Obligatoire : MapStruct pour le mapping

💡 Conseils
• Commencez par le modèle de données
• Implémentez d'abord un type d'assurance complet
• Testez au fur et à mesure avec Swagger
• Utilisez Git avec des commits réguliers
• Documentez votre code
• Respectez les conventions Java

Bon courage ! 🚀
Date de remise : À définir par le formateur
Format de remise : Lien GitHub

Interne

Vous aimerez peut-être aussi