# Installation poste de dev — Vulcan'Affûtage v2

Guide pour monter l'environnement complet sur une machine vierge (Windows).
Écrit pour être donné tel quel à un humain… ou à Claude Code sur l'autre PC.

## 1. Prérequis

- **PHP 8.2+** (8.3/8.4 OK) avec extensions : `pdo_mysql`, `gd`, `intl`, `mbstring`, `xml`, `ctype`, `iconv`, `fileinfo`, `curl`, `openssl`.
  Vérifier : `php -m | findstr /i "pdo_mysql gd intl fileinfo"`
- **Composer 2**
- **MySQL 8** (ou MariaDB récent). Sur ce projet, mysqld est parfois lancé
  à la main sans service Windows : `mysqld --console` dans un terminal dédié.
- **Git**

## 2. Cloner et installer

```bash
git clone https://github.com/Kylian15/vulcan-aff-v2.git
cd vulcan-aff-v2
git checkout feat/admin-v2   # branche par défaut du repo
composer install
```

## 3. Environnement local

```bash
copy .env.example .env.local
```

Puis éditer `.env.local` :
- `DATABASE_URL` : user/mot de passe MySQL locaux ;
- `APP_SECRET` : générer avec `php -r "echo bin2hex(random_bytes(16));"` ;
- les 3 variables `PAYPAL_*` sont **obligatoires** (valeurs sandbox factices
  suffisantes tant qu'on ne teste pas un paiement réel) ;
- laisser `MAILER_DSN=null://null` (aucun envoi réel en dev).

⚠️ Ne jamais versionner `.env.local` (déjà dans `.gitignore`).

## 4. Base de données

```bash
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate -n
php bin/console doctrine:fixtures:load -n
```

`doctrine:fixtures:load` **purge la base** puis charge le socle :
admin (`admin` / `admin123`), réglages boutique (téléphone/e-mail/adresse),
3 modes de livraison, 7 types de couteaux, 8 produits visibles,
1 atelier actif avec créneaux sur 6 semaines.

Données de démo étoffées (25 commandes, clients, analytics 60 jours, notifs) :

```bash
php bin/console doctrine:fixtures:load --group=demo --append
```

### Base de test (pour PHPUnit)

```bash
php bin/console --env=test doctrine:database:create
php bin/console --env=test doctrine:migrations:migrate -n
```

`.env.test` est versionné et déjà correct (mailer null, tracking mock).

## 5. Lancer le serveur de dev

```bash
php -d variables_order=EGPCS -S 127.0.0.1:8000 -t public
```

Deux pièges connus (déjà rencontrés sur le poste principal) :
- **`-t public` obligatoire** — jamais la racine du projet en docroot ;
- **`variables_order=EGPCS`** — sans le `E`, `$_ENV` est vide et Symfony
  ne lit pas les variables d'environnement (pages blanches/erreurs env).

Site : http://127.0.0.1:8000 — Admin : http://127.0.0.1:8000/gestion
(login `admin` / `admin123`).

## 6. Tests

```bash
php bin/phpunit
```

Suite complète ≈ 200 tests / ~4 min. Tout doit être vert avant commit.

## 7. Ce qui ne suit PAS le git (à savoir sur un poste neuf)

- **Images produits** : `public/assets/product/` est gitignoré → dossier
  vide sur un clone neuf. Les fiches produits affichent le fallback.
  Uploader des photos via l'admin (créées automatiquement au premier upload),
  ou copier le dossier depuis l'ancien poste.
- **Carrousel du header** : même logique, dossier d'images filesystem géré
  par `/gestion/carrousel` (`slide-N`, sans DB).
- **`.env.local`** : à recréer (étape 3). Les vrais secrets (SMTP OVH,
  PayPal live, clé La Poste) ne sont volontairement nulle part dans le repo.
- Le cache Symfony (`var/`) et `vendor/` se régénèrent seuls.

## 8. Rappels croisés

- Checklist mise en production : `PROD-CHECKLIST.md`.
- Conventions par dossier : fichiers `AGENTS.md` à la racine de chaque
  répertoire important (`src/Controller`, `templates`, …).
- Migrations : toujours `doctrine:migrations:migrate`, jamais
  `doctrine:schema:update --force`.
