# 🚀 Workflow de Déploiement - Thé Tip Top

## 📊 Vue d'ensemble des environnements

| Environnement | Branche | Base de données | Port DB | URLs |
|---------------|---------|-----------------|---------|------|
| **DEV** | `dev` | `thetiptop_dev` | 5433 | https://dev.dsp5-archi-o24a-15m-g3.fr<br>https://api.dev.dsp5-archi-o24a-15m-g3.fr |
| **PREPROD** | `preprod` | `thetiptop_preprod` | 5434 | https://preprod.dsp5-archi-o24a-15m-g3.fr<br>https://api.preprod.dsp5-archi-o24a-15m-g3.fr |
| **PROD** | `main` | `thetiptop` | 5432 | https://dsp5-archi-o24a-15m-g3.fr<br>https://api.dsp5-archi-o24a-15m-g3.fr |

---

## 🔄 Workflow Git

```
dev → preprod → main
 ↓       ↓        ↓
DEV   PREPROD   PROD
```

---

## 📝 Procédure de déploiement

### 1️⃣ **Développement sur DEV**

```bash
# Vous êtes sur la branche dev
git checkout dev

# Faire vos modifications...

# Commit et push vers dev
git add .
git commit -m "feat: description de la fonctionnalité"
git push origin dev
```

**Déploiement DEV :**
```bash
# Sur le serveur DEV
cd /path/to/backend
git pull origin dev
cp .env.dev .env
npm install
npm run dev
```

---

### 2️⃣ **Déploiement vers PREPROD**

Après avoir testé sur DEV et validé les fonctionnalités :

```bash
# Merger dev vers preprod
git checkout preprod
git pull origin preprod
git merge dev
git push origin preprod
```

**Déploiement PREPROD :**
```bash
# Sur le serveur PREPROD
cd /path/to/backend
git pull origin preprod
cp .env.preprod .env
npm install
npm run dev
```

**⚠️ Tests à effectuer en PREPROD :**
- [ ] Toutes les fonctionnalités principales
- [ ] Authentification (Google, Facebook)
- [ ] Jeu et attribution des lots
- [ ] Interface admin
- [ ] Tirage au sort
- [ ] Performance et sécurité

---

### 3️⃣ **Déploiement en PRODUCTION**

Après validation complète en PREPROD :

```bash
# Merger preprod vers main
git checkout main
git pull origin main
git merge preprod
git push origin main
```

**Déploiement PRODUCTION :**
```bash
# Sur le serveur PRODUCTION
cd /path/to/backend
git pull origin main
cp .env.production .env

# ⚠️ IMPORTANT : Vérifier les secrets en production
nano .env  # Vérifier JWT_SECRET, SESSION_SECRET, etc.

npm install
npm run build  # Si nécessaire
npm start
```

---

## 🗄️ Gestion des bases de données

### Migration de données DEV → PREPROD

```bash
# Dump de la base DEV
pg_dump -h 51.75.24.29 -p 5433 -U postgres -d thetiptop_dev > dev_dump.sql

# Restaurer en PREPROD
psql -h 51.75.24.29 -p 5434 -U postgres -d thetiptop_preprod < dev_dump.sql
```

### Migration de données PREPROD → PROD

```bash
# Dump de la base PREPROD
pg_dump -h 51.75.24.29 -p 5434 -U postgres -d thetiptop_preprod > preprod_dump.sql

# ⚠️ BACKUP PROD avant restauration !
pg_dump -h 51.75.24.29 -p 5432 -U postgres -d thetiptop > prod_backup_$(date +%Y%m%d).sql

# Restaurer en PROD
psql -h 51.75.24.29 -p 5432 -U postgres -d thetiptop < preprod_dump.sql
```

---

## 🔐 Configuration des secrets

### Secrets à changer ABSOLUMENT en PRODUCTION :

- `JWT_SECRET` - Générer avec : `openssl rand -base64 32`
- `SESSION_SECRET` - Générer avec : `openssl rand -base64 32`
- `NEXTAUTH_SECRET` - Générer avec : `openssl rand -base64 32`

### OAuth en production :

1. **Google OAuth** : Créer un nouveau projet sur Google Cloud Console avec les URLs de prod
2. **Facebook OAuth** : Créer une nouvelle app Facebook avec les URLs de prod

---

## ✅ Checklist avant déploiement PRODUCTION

- [ ] Tous les tests passent en PREPROD
- [ ] Les secrets ont été changés (JWT, SESSION)
- [ ] OAuth configuré avec les URLs de production
- [ ] Backup de la base de données PROD effectué
- [ ] Variables d'environnement vérifiées
- [ ] CORS configuré avec les domaines de production
- [ ] Logs configurés pour la production
- [ ] Plan de rollback préparé

---

## 🚨 Rollback en cas de problème

### Si problème en PRODUCTION :

```bash
# 1. Revenir à la version précédente
git checkout main
git reset --hard <commit-précédent>
git push origin main --force

# 2. Restaurer le backup de la base de données
psql -h 51.75.24.29 -p 5432 -U postgres -d thetiptop < prod_backup_YYYYMMDD.sql

# 3. Redémarrer l'application
npm start
```

---

## 📞 Support

En cas de problème, vérifier :
1. Les logs du serveur
2. Les logs de la base de données
3. Les variables d'environnement
4. La configuration CORS
5. Les certificats SSL

---

**Dernière mise à jour** : $(date +%Y-%m-%d)
