# Guide d'installation et de déploiement — PSY / CFP02

---

## 1. Installation du projet en local (de A à Z)

### Cloner le projet

```bash
git clone https://github.com/basheer-11/cfp02_psy.git
cd cfp02_psy
```

### Configurer l'environnement

```bash
cp .env .env.local
```

Éditer `.env.local` et renseigner :

```env
APP_ENV=dev
APP_DEBUG=1
APP_SECRET=une_valeur_aleatoire_32_caracteres

DATABASE_URL="mysql://user:password@127.0.0.1:3306/psy?serverVersion=8&charset=utf8mb4"
```

### Installer les dépendances PHP

```bash
composer install
```

### Installer les dépendances JS et compiler les assets

```bash
npm install
npm run dev
```

> En développement actif, utiliser `npm run watch` pour recompiler automatiquement à chaque modification.

### Créer la base de données et exécuter les migrations

```bash
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate --no-interaction
```

### Lancer le serveur local

```bash
symfony server:start
```

Ou avec Docker :

```bash
docker compose up --wait
```

L'application est accessible sur :

- **HTTP** : http://localhost:8080
- **HTTPS** : https://localhost:8443
- **Mailer (MailCatcher)** : http://localhost:8026

---

## 2. Envoyer les modifications de `main` vers `production`

1- git add .
2- git commit -m 'commentaire'
3- git push origin main

Après avoir développé et commité sur `main`, voici la procédure pour fusionner vers la branche `production`.

### Étapes

```bash
# 1. Se positionner sur la branche production
git checkout production

# 2. Voir ce qui va changer (aperçu des fichiers modifiés)
git diff main --stat

# 3. Fusionner main dans production sans commiter automatiquement
git merge main --no-commit --no-ff

# 4. Commiter le merge
git commit -m "Merge main into production"

# 5. Pousser vers GitHub
git push origin production
```

### Gestion des conflits sur les fichiers Docker / CI

Si un fichier de configuration Docker ou CI est en conflit lors du merge (par exemple `.github/workflows/ci.yaml`), il faut le **supprimer** de la branche production car ces fichiers ne sont utiles que sur `main` :

```bash
git rm .github/workflows/ci.yaml
git commit -m "Merge main into production"
git push origin production
```

> **Règle** : tout fichier lié à l'infrastructure de développement (`ci.yaml`, `compose.override.yaml`, etc.) en conflit sur `production` → on le supprime.

---

## 3. Déployer sur le serveur de production

Se connecter au serveur via SSH, puis :

### Se placer dans le dossier du projet

```bash
cd /apsi
```

### Récupérer les dernières modifications

```bash
# Récupérer les infos sans appliquer
git fetch origin

# Comparer ce qui va changer
git diff production origin/production --stat

# Appliquer les modifications
git pull origin production
```

### Appliquer les migrations (si la BDD a changé)

À faire uniquement si des entités ou migrations ont été ajoutées/modifiées :

```bash
php bin/console doctrine:migrations:migrate --no-interaction
```

> ⚠️ Toujours vérifier les migrations avant de les appliquer en prod. Une migration mal écrite peut altérer les données.

### Vider et réchauffer le cache

```bash
php bin/console cache:clear --env=prod
php bin/console cache:warmup --env=prod
```

### Mettre à jour les assets front-end (CSS / JS)

Si des fichiers CSS ou JS ont été modifiés, il faut :

1. Compiler les assets en local :
   ```bash
   npm run watch
   ```

2. Transférer manuellement le dossier `public/build/` vers le serveur via **FileZilla** (SFTP) en remplaçant l'ancien dossier.

> Le dossier `public/build/` n'est pas versionné sur Git, il doit être transféré manuellement à chaque changement de style ou de JavaScript.

---

Important : n'oublie pas de consulter les autres fichiers .md pour découvrir d'autres fonctionnalités que tu pourrais utiliser dans l'infrastructure du projet.

## Récapitulatif des commandes clés

| Action | Commande |
|--------|----------|
| Voir les différences avant merge | `git diff main --stat` |
| Merger main → production | `git merge main --no-commit --no-ff` |
| Supprimer un fichier conflictuel | `git rm <fichier>` |
| Comparer local vs remote prod | `git diff production origin/production --stat` |
| Récupérer les mises à jour prod | `git pull origin production` |
| Migrations BDD | `php bin/console doctrine:migrations:migrate --no-interaction` |
| Vider le cache prod | `php bin/console cache:clear --env=prod` |
| Réchauffer le cache prod | `php bin/console cache:warmup --env=prod` |
| Compiler les assets | `npm run build` |
