# Stratégie des migrations Flyway ## Vue d’ensemble | Version | Fichier | Rôle | |--------|---------|------| | **V1** | `V1__UnionFlow_Complete_Schema.sql` | Schéma historique consolidé (anciennes V1.2 à V3.7) + données de référence et de test | | **V2** | `V2__Entity_Schema_Alignment.sql` | Alignement du schéma avec les entités JPA (colonnes/tables manquantes, types, index). Idempotent. | Les 25 fichiers d’origine sont conservés dans **`db/legacy-migrations/`** (référence uniquement, Flyway ne les exécute pas). ## Ordre d’exécution 1. **V1** : crée les tables, contraintes et données de base. 2. **V2** : ajoute ou modifie colonnes/tables pour correspondre aux entités JPA (ADD COLUMN IF NOT EXISTS, CREATE TABLE IF NOT EXISTS). Peut être exécuté plusieurs fois sans effet de bord. ## Nouvelle base de données Avec une base vide, Flyway exécute **V1** puis **V2**. Aucune autre action. ## Base déjà migrée avec les anciennes versions (V1.2 à V3.7) Si la base a déjà été migrée avec les 25 anciens scripts, il faut **une seule fois** mettre à jour l’historique Flyway pour refléter la consolidation : 1. Sauvegarder la base. 2. Se connecter en base (psql, DBeaver, etc.) et exécuter : ```sql -- Marquer la consolidation comme appliquée (une seule fois) DELETE FROM flyway_schema_history WHERE version IN ( '1.2','1.3','1.4','1.5','1.6','1.7','2.0','2.1','2.2','2.3','2.4','2.5','2.6','2.7','2.8','2.9','2.10', '3.0','3.1','3.2','3.3','3.4','3.5','3.6','3.7' ); INSERT INTO flyway_schema_history (installed_rank, version, description, type, script, checksum, installed_by, execution_time, success) VALUES ( (SELECT COALESCE(MAX(installed_rank),0) + 1 FROM flyway_schema_history f2), '1', 'UnionFlow Complete Schema', 'SQL', 'V1__UnionFlow_Complete_Schema.sql', NULL, current_user, 0, true ); ``` Après cela, Flyway considère que la version **1** est appliquée et n’exécutera plus les anciens scripts. ## Évolutions futures - **Changement de schéma métier** (nouvelles tables, nouvelles colonnes métier) : ajouter une migration **V3**, **V4**, etc. (une par release ou lot cohérent). - **Alignement entités JPA** : si de nouvelles entités ou champs sont ajoutés au code, compléter **`V2__Entity_Schema_Alignment.sql`** avec des `ADD COLUMN IF NOT EXISTS` / `CREATE TABLE IF NOT EXISTS` pour garder un seul fichier d’alignement. ## Régénérer le script consolidé Si les fichiers dans `legacy/` sont modifiés et que vous voulez régénérer `V1__UnionFlow_Complete_Schema.sql` : ```powershell cd unionflow-server-impl-quarkus ./scripts/merge-migrations.ps1 ``` (Remettre temporairement les 25 fichiers dans `db/migration/` avant de lancer le script, puis les redéplacer dans `legacy/`.)