# Migration CLEO vers la nouvelle architecture

## ✅ MIGRATION COMPLÉTÉE (12 septembre 2025)

## Vue d'ensemble

Cette migration a transformé l'architecture de CLEO pour :
- ✅ **Fusionner 3 bases de données** (`uof_frontal`, `uof_linet`, `logs`) en une seule base `cleo`
- ✅ **Sécuriser les connexions** avec PDO et requêtes préparées
- ✅ **Externaliser la configuration** dans des variables d'environnement
- ✅ **Séparer** application (dva-front) et base de données (maria3)

## Pré-requis

- PHP 8.3+
- MariaDB/MySQL 5.7+
- Accès aux bases existantes (`uof_frontal`, `uof_linet`)
- Container `maria3` accessible depuis l'application

## Structure de la migration

```
migration/
├── migrate_to_cleo.sql          # Script SQL de migration des données
├── deploy_new_architecture.sh   # Script de déploiement automatique
├── rollback.sh                  # Script de retour arrière
└── README.md                    # Ce fichier
```

## Étapes de migration

### 1. Préparation

```bash
# Se placer à la racine du projet
cd /home/pierre/dev/cleo

# Vérifier le fichier .env
cp .env.example .env
nano .env  # Éditer avec vos paramètres
```

Configuration actuelle dans `.env` :
```env
DB_HOST=13.23.33.4        # IP du container maria3
DB_PORT=3306
DB_DATABASE=cleo
DB_USERNAME=cleo_user
DB_PASSWORD=CleoDev2025!   # À changer en production
```

### 2. Exécution de la migration

```bash
# Rendre les scripts exécutables
chmod +x migration/*.sh

# Lancer la migration
./migration/deploy_new_architecture.sh
```

Le script effectue automatiquement :
- ✅ Sauvegarde des fichiers actuels
- ✅ Test de connexion à MariaDB
- ✅ Migration des bases de données
- ✅ Activation des nouveaux fichiers
- ✅ Tests de validation

### 3. Vérification

Après la migration, vérifier :

```bash
# Connexion à la base
mysql -h maria3 -u cleo_user -p cleo

# Vérifier les tables
SHOW TABLES;

# Compter les enregistrements
SELECT 'devis' as table_name, COUNT(*) FROM devis
UNION ALL
SELECT 'clients', COUNT(*) FROM clients
UNION ALL
SELECT 'users', COUNT(*) FROM users;
```

Tester l'application :
- Connexion utilisateur
- Consultation des devis
- Création d'un nouveau devis
- Export Excel

### 4. En cas de problème

Si la migration échoue ou cause des problèmes :

```bash
# Revenir à l'ancienne architecture
./migration/rollback.sh
```

Le rollback :
- Restaure les fichiers originaux
- Conserve les nouveaux fichiers dans `migration/new_architecture_backup/`
- L'application revient sur les bases `uof_frontal` et `uof_linet`

## Changements techniques

### Fichiers modifiés

| Fichier | Changement |
|---------|------------|
| `config/conf.php` | Utilise les variables d'environnement |
| `config/Database.php` | Nouvelle classe PDO singleton |
| `pub/res/d6/d6_tools.php` | Utilise la classe Database |
| `.env` | Configuration externalisée |

### Structure de la base `cleo`

```sql
-- Tables métier (ex-uof_linet)
devis
devis_produits
devis_histo
clients
produits
produits_familles
marches
users
x_familles
x_statuts_devis
x_clients_types

-- Tables système
y_pages         (ex-uof_frontal)
users_entites   (ex-uof_frontal)
z_logs          (ex-base logs ou nouvelle)
```

### Améliorations de sécurité

1. **Requêtes préparées PDO** : Protection contre les injections SQL
2. **Variables d'environnement** : Credentials hors du code
3. **Connexion unique** : Pattern Singleton pour la DB
4. **Logging amélioré** : Traçabilité des requêtes SQL

## Environnements

### DEV/RECETTE (IN3) - ACTIF
```
Container: dva-front (13.23.33.42)
├── Application PHP 8.3
├── Nginx (Alpine Linux)
├── MariaDB : SUPPRIMÉ (12/09/2025)
└── Connexion vers maria3

Container: maria3 (13.23.33.4)
├── MariaDB 11.4
├── Base de données : cleo
├── Tables migrées : 30+
└── Utilisateur : cleo_user
```

**Actions réalisées :**
- ✅ Migration des bases `uof_frontal` et `uof_linet` vers `cleo`
- ✅ Création des tables manquantes (`z_sessions`, `z_stats`, `marches_listes`)
- ✅ Configuration PDO avec pattern Singleton
- ✅ Suppression complète de MariaDB sur dva-front
- ✅ Script de déploiement optimisé (`deploy-cleo-fast.sh`)

### PROD (IN4 - futur)
```
Container: nx4     → Application PHP
Container: maria4  → Base de données cleo
```

## Troubleshooting

### Erreur de connexion à la base

```bash
# Vérifier la connectivité
mysql -h maria3 -u cleo_user -p

# Vérifier les permissions
SHOW GRANTS FOR 'cleo_user'@'%';
```

### Erreur PHP après migration

```bash
# Vérifier les logs
tail -f log/cleo_debug_*.log

# Vérifier les permissions des fichiers
ls -la config/conf.php
ls -la .env
```

### Tables manquantes

```bash
# Réexécuter uniquement la migration SQL
mysql -h maria3 -u cleo_user -p cleo < migration/migrate_to_cleo.sql
```

## Support

Pour toute question ou problème :
1. Consulter les logs dans `/log/`
2. Vérifier le fichier `.env`
3. Utiliser le rollback si nécessaire
4. Documenter l'erreur dans un issue GitHub

## État post-migration

### Fichiers créés/modifiés
- ✅ `.env` : Configuration externalisée
- ✅ `config/Database.php` : Classe PDO singleton
- ✅ `config/conf.php` : Utilise les variables d'environnement
- ✅ `pub/res/d6/d6_tools.php` : Fonctions utilitaires mises à jour
- ✅ `deploy-cleo-fast.sh` : Script de déploiement optimisé (tar.gz)

### Problèmes résolus durant la migration
1. **Tables manquantes** : Création de `z_sessions`, `z_stats`, `marches_listes`
2. **Permissions fichiers** : `.env` en 644, logs en 777 avec owner `nobody`
3. **Compatibilité PDO** : Remplacement de `fetch_assoc()` par `fetch(PDO::FETCH_ASSOC)`
4. **Debug AJAX** : Suppression des commentaires HTML dans les réponses JSON
5. **Fonctions manquantes** : Ajout de `checkPsswd()`, `affiche_date()`, etc.

### Scripts de déploiement
```bash
# Déploiement rapide (30 secondes)
./deploy-cleo-fast.sh

# Déploiement dev (si besoin)
./deploy-cleo-dev.sh
```

---

*Migration complétée pour CLEO v2.0.1 - 12 septembre 2025*