# Guide d'Installation — ERP Rayhan sur Windows
**PFE Ali Guennari — SUARL Rayhan**

---

## Prérequis

Avant de commencer, assure-toi d'avoir :
- Windows 10 version 1903+ ou Windows 11
- Un compte administrateur sur le PC
- Une connexion Internet

---

## Étape 1 — Installer Docker Desktop

### 1.1 Télécharger Docker Desktop

Rends-toi sur le site officiel de Docker et télécharge **Docker Desktop for Windows** :
```
https://www.docker.com/products/docker-desktop/
```

Clique sur **"Download for Windows"**.

### 1.2 Activer la virtualisation dans le BIOS

Docker nécessite la virtualisation matérielle. Pour vérifier qu'elle est activée :
1. Ouvre le **Gestionnaire des tâches** (Ctrl + Shift + Échap)
2. Onglet **Performance** → **CPU**
3. Vérifie que **Virtualisation : Activée** apparaît en bas

Si elle est désactivée, il faut l'activer dans le BIOS (redémarrer → appuyer sur F2/F12/Suppr selon le PC).

### 1.3 Activer WSL 2 (Windows Subsystem for Linux)

Ouvre **PowerShell en tant qu'administrateur** et exécute :

```powershell
wsl --install
```

Redémarre le PC si demandé.

### 1.4 Installer Docker Desktop

1. Lance le fichier `Docker Desktop Installer.exe` téléchargé
2. Laisse les options par défaut (WSL 2 coché)
3. Clique **OK** puis **Close and restart**
4. Après redémarrage, Docker Desktop se lance automatiquement
5. Accepte les conditions d'utilisation si demandé

**Vérification :** Ouvre un terminal (PowerShell ou CMD) et tape :
```cmd
docker --version
docker compose version
```
Tu dois voir quelque chose comme : `Docker version 26.x.x`

---

## Étape 2 — Récupérer le Projet

### Option A — Télécharger depuis Gitea (recommandé)

Ouvre PowerShell et exécute :

```powershell
# Créer un dossier de travail
mkdir C:\rayhan-erp
cd C:\rayhan-erp

# Télécharger l'archive du projet
Invoke-WebRequest -Uri "https://gitea.bolbol.tn/bolbol/rayhan-erp/archive/main.zip" -OutFile "rayhan-erp.zip"

# Extraire l'archive
Expand-Archive -Path "rayhan-erp.zip" -DestinationPath "."

# Se placer dans le dossier
cd rayhan-erp
```

### Option B — Cloner avec Git (si Git est installé)

```cmd
git clone https://gitea.bolbol.tn/bolbol/rayhan-erp.git
cd rayhan-erp
```

> Git pour Windows : https://git-scm.com/download/win

---

## Étape 3 — Lancer l'Application

### 3.1 Démarrer Docker Desktop

Vérifie que Docker Desktop est lancé (icône de baleine dans la barre des tâches en bas à droite).

### 3.2 Lancer les conteneurs

Dans PowerShell, depuis le dossier `rayhan-erp` :

```powershell
docker compose up -d --build
```

> La première fois, cette commande prend **5 à 10 minutes** car elle :
> - Télécharge l'image MySQL 8
> - Télécharge l'image Maven + Java 17
> - Compile le projet Spring Boot
> - Crée les conteneurs

### 3.3 Vérifier que les conteneurs tournent

```powershell
docker ps
```

Tu dois voir deux conteneurs en état `Up` :
```
CONTAINER ID   IMAGE                  STATUS
xxxxx          rayhan-erp-backend     Up X seconds
xxxxx          mysql:8.0              Up X seconds (healthy)
```

---

## Étape 4 — Tester l'API

### 4.1 Vérifier que l'API répond

Ouvre un navigateur et va sur :
```
http://localhost:8090/api/auth/signin
```
Tu verras une erreur 401 (normal, une connexion est requise).

### 4.2 Se connecter (obtenir un token JWT)

Ouvre PowerShell et exécute :

```powershell
$body = '{"username":"admin","password":"Rayhan2024!"}'
Invoke-RestMethod -Uri "http://localhost:8090/api/auth/signin" -Method POST -Body $body -ContentType "application/json"
```

**Réponse attendue :**
```json
{
  "token": "eyJhbGciOiJIUzUxMiJ9...",
  "type": "Bearer",
  "username": "admin",
  "roles": ["ROLE_PDG"]
}
```

### 4.3 Tester avec Postman (recommandé)

Télécharge Postman : https://www.postman.com/downloads/

Configure l'environnement :
- `baseUrl` = `http://localhost:8090`
- Consulte le fichier `Livrables/docs/Guide-Tests-Postman.md` pour tous les scénarios de test

---

## Étape 5 — Accès à la Base de Données (optionnel)

Pour accéder directement à MySQL depuis le PC Windows, utilise **MySQL Workbench** ou **DBeaver** :

```
Host     : localhost
Port     : 3307
Database : rayhan_erp_db
Username : root
Password : rayhan_erp_2024
```

> MySQL Workbench : https://dev.mysql.com/downloads/workbench/

**Note :** Sur le serveur de production (localhost), le port MySQL n'est pas exposé à l'extérieur par mesure de sécurité.

---

## Commandes Docker Utiles

```powershell
# Démarrer les conteneurs (sans rebuild)
docker compose up -d

# Arrêter les conteneurs
docker compose down

# Rebuild après modification du code
docker compose up -d --build

# Voir les logs de l'API en temps réel
docker logs rayhan-backend -f

# Voir les logs MySQL
docker logs rayhan-mysql -f

# Redémarrer uniquement le backend
docker restart rayhan-backend

# Accéder au shell MySQL
docker exec -it rayhan-mysql mysql -u root -prayhan_erp_2024 rayhan_erp_db
```

---

## Résolution des Problèmes Fréquents

### Problème : "Port already in use" (port 8090 occupé)

Un autre programme utilise le port 8090. Solutions :
```powershell
# Trouver ce qui utilise le port
netstat -ano | findstr :8090

# Modifier le port dans docker-compose.yml
# Changer "8090:8080" par "8091:8080" par exemple
```

### Problème : Docker ne démarre pas (WSL 2 non activé)

```powershell
# En PowerShell administrateur
wsl --install
wsl --set-default-version 2
```

Puis redémarre et relance Docker Desktop.

### Problème : "Cannot connect to the Docker daemon"

Docker Desktop n'est pas lancé. Cherche "Docker Desktop" dans le menu Démarrer et lance-le. Attends que l'icône de baleine apparaisse dans la barre des tâches.

### Problème : Build échoue (erreur Maven)

```powershell
# Nettoyer le cache Docker et reconstruire
docker compose down
docker system prune -f
docker compose up -d --build
```

---

## Architecture du Déploiement

```
PC Windows
│
├── Docker Desktop (moteur de conteneurs)
│   ├── rayhan-mysql (conteneur MySQL 8)
│   │   └── Base de données : rayhan_erp_db
│   │       Port interne : 3306 → Port Windows : 3307
│   │
│   └── rayhan-backend (conteneur Spring Boot)
│       └── API REST Java
│           Port interne : 8080 → Port Windows : 8090
│
└── Application Flutter (client)
    └── Se connecte à http://localhost:8090
```

---

## Informations de Connexion par Défaut

| Paramètre | Valeur |
|-----------|--------|
| URL API | `http://localhost:8090` |
| Utilisateur admin | `admin` |
| Mot de passe admin | `Rayhan2024!` |
| Rôle | `ROLE_PDG` (accès complet) |
| DB Host | `localhost:3307` |
| DB Name | `rayhan_erp_db` |
| DB Password | `rayhan_erp_2024` |
