Application web RESTful développée avec Spring Boot pour la gestion des clients et des factures.
Cette application permet de gérer un systÚme de facturation complet avec les fonctionnalités suivantes :
- Gestion CRUD complĂšte des clients
- Création et consultation des factures
- Calcul automatique des totaux (HT, TVA, TTC)
- Recherche avancée des factures
- Export JSON des factures
- Documentation API interactive avec Swagger/OpenAPI
- Framework : Spring Boot 3.3.5
- Langage : Java 17
- Base de données : H2
- ORM : JPA/Hibernate
- Documentation API : SpringDoc OpenAPI (Swagger)
- Validation : Spring Boot Starter Validation
- Build : Maven
- Tests : JUnit 5
- Java 17 ou supérieur
- Maven 3.6+
- IDE recommandé : IntelliJ IDEA ou Visual Studio Code
git clone https://github.com/Otmanesabiri/application-web-avec-java-spring-boot-Facture.git
cd application-web-avec-java-spring-boot-Facturemvn clean compilemvn spring-boot:runL'application sera disponible sur : http://localhost:8095
| Interface | URL | Description |
|---|---|---|
| API Documentation | http://localhost:8095/swagger-ui.html | Interface Swagger interactive |
| Console H2 | http://localhost:8095/h2-console | Interface d'administration de la base de données |
| API Docs JSON | http://localhost:8095/api-docs | Spécification OpenAPI en JSON |
- URL JDBC :
jdbc:h2:mem:exercice - Username :
sa - Password :
password - Driver :
org.h2.Driver
| Méthode | Endpoint | Description |
|---|---|---|
GET |
/api/clients |
Lister tous les clients |
GET |
/api/clients/{id} |
Obtenir un client par ID |
POST |
/api/clients |
Créer un nouveau client |
PUT |
/api/clients/{id} |
Mettre Ă jour un client |
DELETE |
/api/clients/{id} |
Supprimer un client |
| Méthode | Endpoint | Description |
|---|---|---|
GET |
/api/factures |
Lister toutes les factures |
GET |
/api/factures/{id} |
Obtenir une facture par ID |
POST |
/api/factures |
Créer une nouvelle facture |
GET |
/api/factures/recherche/client/{clientId} |
Factures par client |
GET |
/api/factures/recherche/date/{date} |
Factures par date |
GET |
/api/factures/{id}/export |
Exporter une facture en JSON |
{
"id": 1,
"nom": "Entreprise ACME",
"email": "[email protected]",
"siret": "12345678901234",
"dateCreation": "2025-06-18T10:30:00"
}{
"id": 1,
"clientId": 1,
"clientNom": "Entreprise ACME",
"date": "2025-06-18",
"lignes": [
{
"description": "Prestation de conseil",
"quantite": 2.5,
"prixUnitaireHT": 50.00,
"tauxTVA": 20.00
}
],
"totalHT": 125.00,
"totalTVA": 25.00,
"totalTTC": 150.00
}- Nom : Obligatoire, 2-100 caractĂšres
- Email : Obligatoire, format email valide, unique
- SIRET : Obligatoire, exactement 14 chiffres, unique
- ClientId : Obligatoire, client doit exister
- Lignes : Au moins une ligne obligatoire
- Description : Non vide pour chaque ligne
- Quantité : Positive (> 0)
- Prix unitaire HT : Positif ou nul (â„ 0)
- Taux TVA : Valeurs autorisées : 0%, 5.5%, 10%, 20%
- Total HT : Somme de (quantité à prix unitaire HT) pour toutes les lignes
- Total TVA : Somme de (montant HT Ă taux TVA / 100) pour toutes les lignes
- Total TTC : Total HT + Total TVA
- Suppression en cascade : Supprimer un client supprime toutes ses factures
- Unicité des emails et SIRET clients
- Validation des taux de TVA français
mvn test- Tests unitaires du service de facturation
- Validation des rÚgles métier
- Tests de création de factures avec différents scénarios
src/
âââ main/
â âââ java/com/facture/exercice/
â â âââ config/ # Configuration Swagger
â â âââ controller/ # ContrĂŽleurs REST
â â âââ dto/ # Data Transfer Objects
â â âââ entity/ # EntitĂ©s JPA
â â âââ repository/ # Repositories JPA
â â âââ service/ # Services mĂ©tier
â âââ resources/
â âââ application.properties
â âââ static/
â âââ templates/
âââ test/
âââ java/ # Tests unitaires
curl -X POST http://localhost:8095/api/clients \
-H "Content-Type: application/json" \
-d '{
"nom": "Entreprise ACMA",
"email": "[email protected]",
"siret": "12345678901235"
}'curl -X POST http://localhost:8095/api/factures \
-H "Content-Type: application/json" \
-d '{
"clientId": 1,
"date": "2025-06-18",
"lignes": [
{
"description": "Prestation de conseil",
"quantite": 2.5,
"prixUnitaireHT": 50.00,
"tauxTVA": 20
}
]
}'- Par client : Retrouver toutes les factures d'un client
- Par date : Retrouver toutes les factures d'une date donnée
- Export structuré des factures avec toutes les informations
- Format JSON lisible et réutilisable
- Interface Swagger complĂšte avec exemples
- Test direct des endpoints depuis l'interface
- Schémas de données détaillés
L'application utilise H2 en mémoire par défaut. Pour utiliser une base persistante, modifiez application.properties :
# Pour une base H2 persistante
spring.datasource.url=jdbc:h2:file:./data/exercice
spring.jpa.hibernate.ddl-auto=updateserver.port=8095- Créer les entités dans
entity/ - Ajouter les repositories dans
repository/ - Implémenter la logique métier dans
service/ - Créer les DTOs dans
dto/ - Exposer via les contrĂŽleurs dans
controller/
- â SĂ©paration des couches (Controller, Service, Repository)
- â Validation des donnĂ©es avec Bean Validation
- â Gestion des erreurs avec messages explicites
- â Documentation API complĂšte
- â Tests unitaires
- â Calculs automatiques des totaux