Fix: Rendre les tests plus flexibles pour l'environnement CI/CD lionsctl
This commit is contained in:
201
MIGRATION_HIBERNATE.md
Normal file
201
MIGRATION_HIBERNATE.md
Normal file
@@ -0,0 +1,201 @@
|
||||
# Migration vers Hibernate (sans Flyway)
|
||||
|
||||
## 📋 Résumé des changements
|
||||
|
||||
Ce document explique les modifications apportées pour **désactiver Flyway** et laisser **Hibernate gérer automatiquement** la création des tables et le chargement des données.
|
||||
|
||||
---
|
||||
|
||||
## ✅ Changements effectués
|
||||
|
||||
### 1. **Configuration Hibernate** (`application.properties`)
|
||||
|
||||
#### Avant :
|
||||
```properties
|
||||
quarkus.hibernate-orm.database.generation=update
|
||||
quarkus.flyway.migrate-at-start=true
|
||||
quarkus.flyway.baseline-on-migrate=true
|
||||
quarkus.flyway.baseline-version=0
|
||||
quarkus.flyway.locations=classpath:db/migration
|
||||
```
|
||||
|
||||
#### Après :
|
||||
```properties
|
||||
# Hibernate crée les tables automatiquement
|
||||
quarkus.hibernate-orm.database.generation=drop-and-create
|
||||
quarkus.hibernate-orm.log.sql=true
|
||||
|
||||
# Flyway DÉSACTIVÉ - Hibernate gère le schéma
|
||||
quarkus.flyway.migrate-at-start=false
|
||||
```
|
||||
|
||||
### 2. **Fichier `import.sql` créé**
|
||||
|
||||
Un nouveau fichier `src/main/resources/import.sql` a été créé. Ce fichier contient toutes les données de test et sera **automatiquement exécuté par Hibernate** après la création des tables.
|
||||
|
||||
Le fichier contient :
|
||||
- ✅ Types de chantier
|
||||
- ✅ Clients (entreprises et particuliers ivoiriens)
|
||||
- ✅ Employés
|
||||
- ✅ Équipes
|
||||
- ✅ Affectation des employés aux équipes
|
||||
- ✅ Marques de matériel
|
||||
- ✅ Matériel BTP
|
||||
- ✅ Chantiers
|
||||
- ✅ Phases des chantiers
|
||||
- ✅ Devis et lignes de devis
|
||||
- ✅ Factures et lignes de factures
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Comment ça fonctionne ?
|
||||
|
||||
### Cycle de démarrage de l'application :
|
||||
|
||||
1. **Hibernate démarre** et lit les entités JPA
|
||||
2. **Hibernate crée les tables** automatiquement (`drop-and-create`)
|
||||
3. **Hibernate exécute `import.sql`** pour charger les données
|
||||
4. **L'application est prête** avec une base de données complète
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Modes de génération Hibernate
|
||||
|
||||
Vous pouvez ajuster le comportement avec la propriété `quarkus.hibernate-orm.database.generation` :
|
||||
|
||||
| Mode | Description | Utilisation |
|
||||
|------|-------------|-------------|
|
||||
| `drop-and-create` | **Supprime et recrée** les tables à chaque démarrage | ✅ **Développement** (mode actuel) |
|
||||
| `update` | **Met à jour** le schéma sans supprimer les données | 🔄 Développement avec persistance |
|
||||
| `create` | **Crée** les tables si elles n'existent pas | 🆕 Premier démarrage |
|
||||
| `validate` | **Valide** le schéma sans modification | 🏭 **Production** |
|
||||
| `none` | **Aucune action** | 🚫 Gestion manuelle |
|
||||
|
||||
---
|
||||
|
||||
## 📝 Recommandations par environnement
|
||||
|
||||
### **Développement local** (actuel)
|
||||
```properties
|
||||
quarkus.hibernate-orm.database.generation=drop-and-create
|
||||
quarkus.flyway.migrate-at-start=false
|
||||
```
|
||||
✅ Les tables sont recréées à chaque démarrage avec les données de test
|
||||
|
||||
### **Tests**
|
||||
```properties
|
||||
%test.quarkus.hibernate-orm.database.generation=drop-and-create
|
||||
%test.quarkus.flyway.migrate-at-start=false
|
||||
```
|
||||
✅ Déjà configuré dans `application-test.yml`
|
||||
|
||||
### **Production**
|
||||
```properties
|
||||
%prod.quarkus.hibernate-orm.database.generation=validate
|
||||
%prod.quarkus.flyway.migrate-at-start=false
|
||||
```
|
||||
⚠️ **Important** : En production, utilisez `validate` pour éviter toute modification accidentelle du schéma
|
||||
|
||||
---
|
||||
|
||||
## 🗂️ Fichiers de migration Flyway (conservés)
|
||||
|
||||
Les fichiers de migration Flyway dans `src/main/resources/db/migration/` sont **conservés** mais **non utilisés** :
|
||||
- `V1__Initial_schema.sql`
|
||||
- `V2__Sample_data.sql`
|
||||
- `V3__create_auth_tables.sql`
|
||||
- `V4__create_phase_templates_fixed.sql`
|
||||
- `V5__Ivorian_test_data.sql`
|
||||
|
||||
Vous pouvez les supprimer si vous ne prévoyez pas de réactiver Flyway.
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Pour réactiver Flyway (si nécessaire)
|
||||
|
||||
Si vous souhaitez revenir à Flyway :
|
||||
|
||||
1. **Modifier `application.properties`** :
|
||||
```properties
|
||||
quarkus.hibernate-orm.database.generation=validate
|
||||
quarkus.flyway.migrate-at-start=true
|
||||
quarkus.flyway.baseline-on-migrate=true
|
||||
quarkus.flyway.baseline-version=0
|
||||
quarkus.flyway.locations=classpath:db/migration
|
||||
```
|
||||
|
||||
2. **Supprimer ou renommer `import.sql`** :
|
||||
```bash
|
||||
mv src/main/resources/import.sql src/main/resources/import.sql.bak
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Tester la configuration
|
||||
|
||||
### Démarrer l'application :
|
||||
```bash
|
||||
./mvnw quarkus:dev
|
||||
```
|
||||
|
||||
### Vérifier les logs :
|
||||
Vous devriez voir dans les logs :
|
||||
```
|
||||
Hibernate: drop table if exists clients cascade
|
||||
Hibernate: drop table if exists chantiers cascade
|
||||
...
|
||||
Hibernate: create table clients (...)
|
||||
Hibernate: create table chantiers (...)
|
||||
...
|
||||
Hibernate: insert into types_chantier (...)
|
||||
Hibernate: insert into clients (...)
|
||||
...
|
||||
```
|
||||
|
||||
### Accéder à la console H2 (en développement) :
|
||||
```
|
||||
http://localhost:8080/q/dev
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ❓ FAQ
|
||||
|
||||
### **Q : Pourquoi désactiver Flyway ?**
|
||||
**R :** Flyway et Hibernate peuvent entrer en conflit lorsqu'ils tentent tous deux de gérer le schéma de la base de données. En développement, Hibernate seul est plus simple et plus rapide.
|
||||
|
||||
### **Q : Les données sont-elles perdues à chaque redémarrage ?**
|
||||
**R :** Oui, avec `drop-and-create`. Pour conserver les données entre les redémarrages, utilisez `update` au lieu de `drop-and-create`.
|
||||
|
||||
### **Q : Comment passer en mode `update` ?**
|
||||
**R :** Modifiez `application.properties` :
|
||||
```properties
|
||||
quarkus.hibernate-orm.database.generation=update
|
||||
```
|
||||
|
||||
### **Q : Le fichier `import.sql` est-il exécuté avec `update` ?**
|
||||
**R :** Oui, mais seulement au premier démarrage. Ensuite, il peut causer des erreurs de doublons. Pour éviter cela, commentez ou supprimez les lignes déjà insérées.
|
||||
|
||||
### **Q : Puis-je utiliser Hibernate en production ?**
|
||||
**R :** Oui, mais utilisez **`validate`** pour éviter toute modification du schéma. En production, il est recommandé de gérer les migrations avec Flyway ou Liquibase.
|
||||
|
||||
---
|
||||
|
||||
## 📚 Ressources
|
||||
|
||||
- [Quarkus Hibernate ORM Guide](https://quarkus.io/guides/hibernate-orm)
|
||||
- [Quarkus Flyway Guide](https://quarkus.io/guides/flyway)
|
||||
- [Hibernate Schema Generation](https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#schema-generation)
|
||||
|
||||
---
|
||||
|
||||
## ✅ Résultat final
|
||||
|
||||
Votre application démarre maintenant avec :
|
||||
- ✅ **Hibernate** crée automatiquement toutes les tables
|
||||
- ✅ **`import.sql`** charge automatiquement les données de test
|
||||
- ✅ **Flyway** est désactivé (pas de conflit)
|
||||
- ✅ **Base de données prête** avec des données réalistes pour le marché ivoirien
|
||||
|
||||
Bon développement ! 🚀
|
||||
|
||||
Reference in New Issue
Block a user