# 🚀 Guide de Migration vers OVH Cloud Database

## ✅ Migration effectuée le 11 février 2026

### 📊 Base de données migrée

**Source** : `docker/faildaily_local_import_utf8.sql` (version complète avec 37 tables)

**Destination** : OVH Cloud Database

- Host: `gb9434-001.eu.clouddb.ovh.net`
- Port: `35670`
- Database: `faildaily_bdd` (tables principales + logs dans la même base)
- User: `taaazzz`
- Password: `51008473ZoE`

### 📋 État après migration

| Élément       | Quantité |
| ------------- | -------- |
| Tables (app)  | 37       |
| Tables (logs) | 5        |
| Utilisateurs  | 17       |
| Fails         | 19       |
| Commentaires  | 4        |
| Profils       | 17       |
| Activity logs | 88       |

### ⚠️ Limitations OVH Cloud

**Triggers non supportés** - Les triggers suivants doivent être gérés dans le code :

1. **`profiles_before_insert`** : Initialiser `preferences` et `stats` à la création d'un profil
2. **`users_after_insert`** : Créer automatiquement un profil lors de la création d'un utilisateur

Voir fichier [`docker/triggers_ovh_cloud.sql`](triggers_ovh_cloud.sql) pour la logique à implémenter.

---

## 🔧 Déploiement sur le serveur OVH

### 1. Mettre à jour le secret de la base de données

```bash
ssh ubuntu@141.94.42.172

# Supprimer l'ancien secret
docker secret rm db_password

# Créer le nouveau secret avec le mot de passe OVH Cloud
echo '51008473ZoE' | docker secret create db_password -

# Vérifier
docker secret ls | grep db_password
```

### 2. ~~Créer la base de données logs~~ ✅ Déjà fait

Les tables logs sont déjà importées dans `faildaily_bdd` (même base que les tables principales).
OVH Cloud Database limite le nombre de bases, donc tout est centralisé.

### 3. Déployer la nouvelle stack

```bash
# Naviguer vers le dossier docker
cd /home/taaazzz/FailDaily/docker

# Récupérer les dernières modifications
git pull

# Déployer la nouvelle stack OVH Cloud
docker stack deploy -c docker-stack.ovh-cloud.yml faildaily
```

### 5. Vérifier le déploiement

```bash
# Vérifier les services
docker service ls | grep faildaily

# Vérifier les logs du backend
docker service logs -f faildaily_backend --tail 100

# Vérifier la connexion à la base
docker service logs faildaily_backend | grep "Database connected"
```

---

## 💻 Configuration locale (Développement)

### Option 1 : Utiliser OVH Cloud depuis votre machine locale

```bash
# Copier le fichier de configuration
cp .env.ovh-cloud .env

# Vérifier la connexion
cd backend-api
npm run dev

# Vous devriez voir :
# 🔐 Loaded DB_HOST from environment variable
# 🔐 Loaded DB_PASSWORD from environment variable
# ✅ Database connected to gb9434-001.eu.clouddb.ovh.net:35670/faildaily_bdd
```

### Option 2 : Utiliser MySQL local pour le développement

```bash
# Restaurer la base localement
mysql -u root -p faildaily < "docker/faildaily_local_import_utf8_notriggers.sql"

# Utiliser .env avec localhost
cp .env.example .env
# Éditer .env avec :
# DB_HOST=localhost
# DB_PORT=3306
# DB_NAME=faildaily
```

---

## 🔍 Vérification de la migration

### Tester la connexion depuis OVH

```bash
ssh ubuntu@141.94.42.172 "mysql -h gb9434-001.eu.clouddb.ovh.net -P 35670 -u taaazzz -p'51008473ZoE' -e 'SELECT COUNT(*) FROM faildaily_bdd.users;'"
```

### Tester les endpoints de l'API

```bash
# Health check
curl https://faildaily.com/api/health

# Liste des utilisateurs (admin)
curl https://faildaily.com/api/admin/users
```

---

## 📂 Fichiers de sauvegarde

| Fichier                                      | Description                         | Emplacement       |
| -------------------------------------------- | ----------------------------------- | ----------------- |
| `faildaily_local_import_utf8.sql`            | Version source complète             | Local : `docker/` |
| `faildaily_local_import_utf8_notriggers.sql` | Version sans triggers pour import   | Local : `docker/` |
| `faildaily_ovh_docker_backup.sql`            | Sauvegarde ancienne base Docker     | Serveur : `/tmp/` |
| `triggers_ovh_cloud.sql`                     | Triggers à implémenter dans le code | Local : `docker/` |

---

## 🔧 Modifications du code nécessaires

### backend-api/src/controllers/auth.controller.js

**Lors de la création d'un utilisateur** (remplacer le trigger `users_after_insert`) :

```javascript
// Après l'insertion de l'utilisateur
const [userResult] = await pool.query(
  'INSERT INTO users (id, email, ...) VALUES (?, ?, ...)',
  [userId, email, ...]
);

// ⚠️ IMPORTANT : Créer le profil manuellement (remplace le trigger)
await pool.query(
  'INSERT INTO profiles (id, user_id, preferences, stats) VALUES (UUID(), ?, ?, ?)',
  [
    userId,
    '{}',
    JSON.stringify({ badges: [], totalFails: 0, couragePoints: 0 })
  ]
);
```

### backend-api/src/controllers/profile.controller.js

**Lors de la création d'un profil** (remplacer le trigger `profiles_before_insert`) :

```javascript
// S'assurer que preferences et stats ont des valeurs par défaut
const preferences = profileData.preferences || "{}";
const stats =
  profileData.stats ||
  JSON.stringify({
    badges: [],
    totalFails: 0,
    couragePoints: 0,
  });

await pool.query(
  "INSERT INTO profiles (id, user_id, preferences, stats) VALUES (?, ?, ?, ?)",
  [UUID(), userId, preferences, stats],
);
```

---

## 📈 Avantages de la migration

✅ **Performance** : Base de données managée avec SSD et ressources garanties  
✅ **Fiabilité** : Sauvegardes automatiques quotidiennes par OVH  
✅ **Scalabilité** : Possibilité d'augmenter les ressources facilement  
✅ **Maintenance** : Plus besoin de gérer le conteneur MySQL  
✅ **Sécurité** : Connexions SSL, pare-feu OVH

---

## 🔙 Rollback (en cas de problème)

```bash
# Sur le serveur OVH
cd /home/taaazzz/FailDaily/docker

# Revenir à l'ancienne stack avec MySQL interne
docker stack deploy -c docker-stack.ovh.yml faildaily

# Restaurer l'ancien secret
docker secret rm db_password
echo 'ancien-mot-de-passe' | docker secret create db_password -
```

---

## 📝 Prochaines étapes recommandées

1. ✅ Implémenter les triggers dans le code - **FAIT**
2. ✅ Importer les tables logs dans OVH Cloud - **FAIT** (dans faildaily_bdd)
3. ⏳ Configurer les sauvegardes automatiques via l'interface OVH
4. ⏳ Monitorer les performances pendant une semaine
5. ⏳ Supprimer le conteneur MySQL local une fois la stabilité confirmée

**Note** : Les tables logs sont dans la même base `faildaily_bdd` au lieu d'une base séparée, car OVH Cloud Database limite le nombre de bases. Cela n'affecte pas le fonctionnement de l'application.

---

**Date de migration** : 11 février 2026  
**Responsable** : Taaazzz  
**Statut** : ✅ Migration réussie - Tests requis
