# 🚀 Système de Mise à Jour OMAG

Système complet de mise à jour automatique pour les clients on-premise.

---

## ⚡ Utilisation Rapide

### Générer un package

```bash
npm run package:patch   # 1.0.0 → 1.0.1
npm run package:minor   # 1.0.1 → 1.1.0
npm run package:major   # 1.1.0 → 2.0.0
```

**Questions posées:**
1. Changelog → Décrivez les modifications (Entrée 2x pour terminer)
2. Scripts SQL? → `o` ou `n`
3. Confirmer? → `O`

**Résultat:** Fichiers créés dans `D:\Projets\installation\updates\vX.X.X\`

### Uploader manuellement

**Fichiers à uploader sur updates.omag.ma:**
- `omag-update-X.X.X.zip` → `/var/www/updates.omag.ma/update/`
- `version.json` → `/var/www/updates.omag.ma/update/`

**Méthodes:**
- **WinSCP** (recommandé): Glisser-déposer les fichiers
- **SCP**: `scp fichier user@updates.omag.ma:/chemin/`

### Vérifier

```
https://updates.omag.ma/update/version.json
```

---

## 📋 Exemple Complet

```bash
# 1. Compiler le frontend (si modifié)
cd D:\Projets\omagweb
npm run build

# 2. Retour au backend
cd D:\Projets\omagAPI

# 3. Générer le package
npm run package:patch

# 4. Résultat
✅ D:\Projets\installation\updates\v1.0.1\
   - omag-update-1.0.1.zip (40 MB)
   - version.json

# 5. Uploader via WinSCP
# 6. Vérifier: https://updates.omag.ma/update/version.json
# 7. Clients verront la mise à jour! 🎉
```

---

## 🏗️ Architecture

### Fichiers du système

```
maj_web/
├── generer-package.js   ← Script de génération
├── updateManager.js     ← Gestionnaire (backend)
├── .gitignore          ← Configuration git
└── README.md            ← Ce fichier
```

**Note**: Les dossiers `backup/` et `temp/` sont créés automatiquement lors des installations.

### Structure d'un package

```
omag-update-X.X.X.zip
├── manifest.json         # Métadonnées
├── files/
│   ├── backend/         # Backend complet (734 fichiers)
│   └── frontend/        # Frontend compilé (449 fichiers)
└── sql/ (optionnel)     # Scripts SQL
```

---

## 🔧 Configuration Serveur

### Prérequis sur updates.omag.ma

```bash
# Créer le dossier
sudo mkdir -p /var/www/updates.omag.ma/update
sudo chown -R user:user /var/www/updates.omag.ma
```

**Configuration nginx:**
```nginx
server {
    listen 80;
    server_name updates.omag.ma;
    root /var/www/updates.omag.ma;

    location /update/ {
        alias /var/www/updates.omag.ma/update/;
        add_header Access-Control-Allow-Origin *;
    }
}
```

---

## 🔒 Sécurité & Fiabilité

### Vérification d'intégrité
- Hash SHA256 vérifié avant installation
- Si corrompu → installation annulée

### Sauvegarde automatique
Avant chaque installation:
- Backup complet backend + frontend
- Stocké dans `../backups/` (en dehors du projet)

### Rollback automatique
En cas d'erreur:
- Restauration automatique de la sauvegarde
- Message d'erreur à l'utilisateur

---

## 📊 Flux d'installation

1. Utilisateur clique sur 🔄 dans l'app
2. Vérification → `updates.omag.ma/update/version.json`
3. Affichage changelog + bouton "Installer"
4. Téléchargement avec barre de progression
5. Vérification hash SHA256
6. Sauvegarde automatique
7. Installation (backend → racine, frontend → public/)
8. Mise à jour version.json local
9. Redémarrage PM2
10. Succès! 🎉

**Durée**: 2-5 minutes

---

## 🐛 Dépannage

### Bouton 🔄 n'apparaît pas

> ⚠️ **Note**: Le champ `mode_dev` de la table `Societes` contrôle l'affichage du bouton de mise à jour.
> Ce champ est différent de la configuration système `isCloud` (détection Cloud/On-Premise).

```sql
UPDATE Societes SET mode_dev = 1 WHERE IDSociete = 1;
```

### Frontend non compilé

```bash
cd D:\Projets\omagweb
npm run build
```

### Logs

```bash
# Backend
npm run pm2:logs

# Serveur
ssh user@updates.omag.ma
tail -f /var/log/nginx/updates.omag.ma.access.log
```

---

## 📝 Versioning Sémantique

- **Patch** (1.0.0 → 1.0.1): Bugs fixes
- **Minor** (1.0.1 → 1.1.0): Nouvelles fonctionnalités
- **Major** (1.1.0 → 2.0.0): Changements majeurs

---

## 🔍 API Endpoints

```javascript
GET  /api/update/check              // Vérifier mises à jour
GET  /api/update/current-version    // Version actuelle
POST /api/update/download           // Télécharger
GET  /api/update/progress           // Progression
POST /api/update/install            // Installer
GET  /api/update/backups            // Liste sauvegardes
POST /api/update/rollback/:name     // Restaurer
```

---

## 💡 Notes Importantes

### Dossier de release
Les packages sont générés dans `D:\Projets\installation\updates\` (hors du projet backend) pour éviter une boucle infinie lors de la copie.

### Dossiers automatiques
`backup/` et `temp/` sont créés automatiquement par `updateManager.js`:
- `temp/` : Téléchargements et extraction
- `backup/` : Sauvegardes avant installation

### Exclusions
Le backend copié exclut: `node_modules/`, `.git/`, `.env`, fichiers de test

---

## 📋 Checklist Déploiement

**Avant génération:**
- [ ] Code testé
- [ ] Frontend compilé
- [ ] Changelog préparé
- [ ] Scripts SQL testés (si applicable)

**Après upload sur /var/www/updates.omag.ma/update/:**
- [ ] version.json accessible (https://updates.omag.ma/update/version.json)
- [ ] Package téléchargeable
- [ ] Test sur staging

---

## ✅ Système Production-Ready

**Version actuelle**: 1.0.0
**Dernière mise à jour**: 2025-11-15

Le système est complet et prêt pour la production! 🚀
