# Environnement de développement local

Monté le 05/08/2026 pendant le lot L0. Permet de développer et de vérifier sans jamais
toucher à la production.

## Prérequis (déjà présents sur la machine)

| Outil | Version | Remarque |
|---|---|---|
| PHP | **8.2** obligatoire | `/opt/homebrew/opt/php@8.2/bin/php`. **Le PHP 8.5 du système ne convient pas** : `phpoffice/phpspreadsheet` verrouillé par `composer.lock` exige `php < 8.5`. |
| MySQL | 9.6 (Homebrew) | Service déjà démarré |
| Composer | 2.9 | À lancer avec le PHP 8.2 |

## Installation

```bash
PHP82=/opt/homebrew/opt/php@8.2/bin/php

mysql -u root -e "CREATE DATABASE IF NOT EXISTS efektiv_local CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

cd <dossier-du-back>
cp .env.example .env
$PHP82 /opt/homebrew/bin/composer install
$PHP82 artisan key:generate
```

Puis dans `.env`, **décommenter et renseigner** le bloc base de données (il est commenté
par défaut, ce qui fait échouer la connexion sans message explicite) :

```
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=efektiv_local
DB_USERNAME=root
DB_PASSWORD=
APP_URL=http://127.0.0.1:8000
FRONT_URL=http://localhost:5173
```

Enfin :

```bash
$PHP82 artisan migrate:fresh --seed
```

> Ceci ne fonctionne qu'à partir de la branche `fix/l0-correctifs-compteurs` : sur
> `development`, la migration échoue à la 6ᵉ étape et le seed s'arrête sur un rôle manquant.

## Contenu obtenu

4 utilisateurs, 7 rôles, 7 cours, 21 leçons-sections, 63 supports, 34 quiz, 128 questions.

Comptes de démonstration (mot de passe `password`) : `admin@mail.com`, `manager@mail.com`,
`teacher@mail.com`, `learner@mail.com`.

## Tests

```bash
/opt/homebrew/opt/php@8.2/bin/php vendor/bin/phpunit
```

Les tests tournent sur **SQLite en mémoire** (`phpunit.xml`), pas sur la base MySQL locale.
Conséquence à connaître : une migration qui interroge `information_schema` doit être gardée
par un test de driver, sinon elle casse toute la suite.

**Référence actuelle : 0 échec** (les 5 échecs `cta_url` historiques ont été éteints par
l'issue #97, lot L4.5). **Tout échec est une régression.**

## Pièges rencontrés

- Le `.env.example` livre le bloc base de données **commenté** : sans intervention, Laravel
  tente une connexion par défaut et l'erreur n'est pas parlante.
- `vendor/bin/pint --dirty` reformate l'intégralité des fichiers touchés, pas seulement les
  lignes modifiées : le diff paraît plus large qu'il ne l'est.
- Renseigner `FRONT_URL` en local fait échouer un test qui supposait cette variable vide
  (corrigé dans L0, mais le réflexe reste utile pour d'autres cas).
