# Guide de développement local — LÉZIDÉJOU

Ce guide fournit l'ensemble des instructions nécessaires pour installer, exécuter, tester et administrer localement la plateforme LÉZIDÉJOU (Phase 1).

---

## 1. Prérequis d'environnement

Avant de commencer, assurez-vous que les outils suivants sont installés et configurés dans votre environnement :

* **PHP** : `^8.4` (version 8.4.24 ou supérieure recommandée) avec les extensions `pdo_sqlite`, `sqlite3`, `pdo_mysql`, `mbstring`, `openssl`, `tokenizer`, `xml`, `ctype`, `json`, `bcmath`, `fileinfo`, `zip`.
* **Composer** : version `2.7+` (version 2.10.x recommandée).
* **Node.js** : version `24.19.0 LTS` (version 24.x active).
* **npm** : version `11.x`.
* **SQLite** : pour le fonctionnement local standard et les suites de tests unitaires/fonctionnels.
* **MySQL** : serveur et client `8.4.x` (requis pour la suite de tests d'intégration représentative).

---

## 2. Installation initiale

Depuis la racine du projet `LEZIDEJOU-platform` :

### 2.1 Installation reproductible des dépendances PHP et JavaScript

```bash
# Installation des dépendances PHP à partir du fichier composer.lock
composer install --no-interaction --prefer-dist

# Installation reproductible des dépendances Node.js à partir du fichier package-lock.json
npm ci
```

> **Note sur `npm install`** : La commande `npm ci` garantit une installation strictement conforme au fichier `package-lock.json`. La commande `npm install` doit être réservée aux ajouts ou modifications volontaires de dépendances.

### 2.2 Configuration du fichier d'environnement local `.env`

Si le fichier `.env` n'existe pas encore, copiez le fichier d'exemple fourni sans écraser un fichier existant :

```powershell
if (-not (Test-Path .env)) {
    Copy-Item .env.example .env
}
```

Générez la clé d'application uniquement si celle-ci n'est pas encore définie dans `.env` :

```bash
php artisan key:generate
```

### 2.3 Initialisation de la base SQLite locale

Par défaut, l'environnement local standard utilise une base SQLite :

```powershell
# Création du fichier SQLite s'il n'existe pas
if (-not (Test-Path database/database.sqlite)) {
    New-Item -ItemType File -Path database/database.sqlite
}

# Exécution des migrations non destructives
php artisan migrate
```

> **Note importante** : Aucun compte administrateur n'est inséré automatiquement. `DatabaseSeeder.php` ne crée aucun utilisateur par défaut.

---

## 3. Lancement quotidien rapide (Développement local)

Pour démarrer rapidement le serveur local de développement :

### 3.1 Mode 1 — Compilation des assets puis serveur Laravel

```bash
# Compilation des assets frontend avec Vite
npm run build

# Démarrage du serveur de développement Laravel
php artisan serve --host=127.0.0.1 --port=8000
```

Le portail est alors accessible à l'URL exacte : **`http://127.0.0.1:8000`**.

### 3.2 Mode 2 — Développement interactif avec rechargement à chaud (Hot Module Replacement)

Dans deux terminaux distincts :

```bash
# Terminal 1 : serveur de développement Vite
npm run dev

# Terminal 2 : serveur Laravel
php artisan serve --host=127.0.0.1 --port=8000
```

---

## 4. Navigation et pages publiques accessibles

Une fois le serveur démarré sur `http://127.0.0.1:8000`, les pages suivantes sont consultables :

| Page | URL locale | Description |
|---|---|---|
| Accueil | `http://127.0.0.1:8000/` | Sélection éditoriale et présentation de la marque |
| Projets | `http://127.0.0.1:8000/projets` | Catalogue complet des projets numériques |
| GoodGasoilPrice | `http://127.0.0.1:8000/projets/good-gasoil-price` | Fiche de présentation de GoodGasoilPrice (`in_development`) |
| Menu Planner | `http://127.0.0.1:8000/projets/menu-planner` | Fiche de présentation de Menu Planner (`in_development`) |
| Belote Pro | `http://127.0.0.1:8000/projets/belote-pro` | Fiche de présentation de Belote Pro (`in_development`) |
| Maths & Îles | `http://127.0.0.1:8000/projets/maths-iles` | Fiche de présentation de Maths & Îles (`in_development`) |
| LivraSign | `http://127.0.0.1:8000/projets/livrasign` | Fiche de présentation de l'application LivraSign |
| Jeux | `http://127.0.0.1:8000/jeux` | Entrée directe vers le catalogue filtré sur les jeux |
| Musique | `http://127.0.0.1:8000/musique` | Présentation musicale (Joanto & Etbeur Music) |
| Boutique | `http://127.0.0.1:8000/boutique` | Présentation de la boutique (SerajoPrints) |
| À propos | `http://127.0.0.1:8000/a-propos` | Structure, vision et démarche |
| Mentions légales | `http://127.0.0.1:8000/mentions-legales` | Page juridique d'information |
| Politique de confidentialité | `http://127.0.0.1:8000/confidentialite` | Politique de données réelles |
| Administration | `http://127.0.0.1:8000/admin` | Panneau Filament protégé avec TOTP |

### Politique d'indexation locale (Environnement noindex)
En environnement local (`APP_ENV=local` ou `testing`) :
* Toutes les pages reçoivent la balise `<meta name="robots" content="noindex,follow">`.
* `/robots.txt` applique `Disallow: /` pour empêcher toute exploration par les robots d'indexation.
* `/sitemap.xml` retourne un document XML valide contenant un `urlset` vide.

---

## 5. Gestion des comptes administrateurs

L'accès au panneau `/admin` nécessite un compte avec `is_admin = true` et la configuration d'un TOTP.

### Création interactive d'un compte administrateur

Pour créer un administrateur local en toute sécurité, utilisez la commande console dédiée :

```bash
php artisan lezidejou:admin:create
```

* La commande demande interactivement : nom, adresse e-mail valide, et mot de passe (avec confirmation masquée).
* Le mot de passe doit respecter les règles de complexité : minimum 12 caractères, avec majuscule, minuscule, chiffre et caractère spécial.
* Aucun mot de passe ni secret n'est écrit dans les logs ou fichiers du projet.
* Lors de la première connexion sur `http://127.0.0.1:8000/admin`, Filament vous guidera pour scanner le QR Code TOTP avec votre application d'authentification (Google Authenticator, Bitwarden, etc.) et enregistrer vos 8 codes de récupération chiffrés.

---

## 6. Suites de validation et tests

Le projet distingue 4 niveaux de validation :

### 6.1 Niveau A — Validation rapide (SQLite & Analyses statiques)

Cette suite peut être exécutée fréquemment pendant le développement :

```bash
# Vérification de la configuration Composer
composer validate --strict

# Vérification du style de code
php vendor/bin/pint --test

# Analyse statique PHPStan (Niveau 5)
php vendor/bin/phpstan analyse

# Compilation des assets (nécessaire avant les tests de vues Blade)
npm run build

# Tests unitaires PHPUnit (SQLite en mémoire)
php artisan test --testsuite=Unit

# Tests fonctionnels PHPUnit (Routes, SEO, Admin, Auth)
php artisan test --testsuite=Feature
```

### 6.2 Niveau B — Validation MySQL 8.4 représentative (Suite Integration)

La suite `Integration` valide le comportement réel sous MySQL 8.4 (schéma, types de colonnes, persistance chiffrée, transactions).

#### Prérequis de configuration locale (une seule fois par machine) :
1. Créez la base de données locale `lezidejou_test` et le compte utilisateur dédié `lezidejou_test_user` sur votre serveur MySQL 8.4 local.
2. Renseignez les identifiants dans le fichier `.env.mysql-testing` à la racine de `LEZIDEJOU-platform` (ce fichier est **strictement ignoré par Git** et ne doit jamais être versionné).
3. Exemple de structure de `.env.mysql-testing` :
   ```dotenv
   DB_CONNECTION=mysql
   DB_HOST=127.0.0.1
   DB_PORT=3306
   DB_DATABASE=lezidejou_test
   DB_USERNAME=lezidejou_test_user
   DB_PASSWORD=votre_mot_de_passe_securise
   ```

#### Exécution des tests d'intégration MySQL :

```bash
# Migrations non destructives sur la base MySQL de test
php artisan migrate --env=mysql-testing --force

# Exécution de la suite d'intégration PHPUnit
php artisan test --env=mysql-testing --configuration=phpunit.mysql.xml --testsuite=Integration
```

### 6.3 Niveau C — Validation navigateur complète (Playwright E2E & Accessibilité)

La suite de tests de bout en bout vérifie l'expérience utilisateur réelle sous Chromium (4 formats d'écran, navigation au clavier, absence d'erreurs console/réseau, et 0 violation d'accessibilité axe-core).

```bash
# S'assurer que les assets de production sont à jour
npm run build

# Exécution des tests Playwright (1 seul worker, port 8001 éphémère)
npm run test:e2e
```

### 6.4 Niveau D — Audits de performance et qualité (Lighthouse CI)

Valide les métriques de performance de laboratoire, d'accessibilité, de bonnes pratiques et de SEO sur les 10 URL publiques autorisées (30 collectes au total sur le port 8002) :

```bash
# Test d'isolation unitaire du patch de nettoyage Windows
npm run test:lighthouse-patch

# Audit complet Lighthouse CI (30 collectes)
npm run test:lighthouse
```

---

## 7. Arrêt propre des serveurs et contrôle des ports

À la fin de votre session de développement ou de test :

1. Arrêtez les serveurs en appuyant sur `Ctrl + C` dans les terminaux respectifs.
2. Vérifiez que les ports locaux `8000`, `8001` et `8002` sont bien libérés :

```powershell
Get-NetTCPConnection -LocalPort 8000,8001,8002 -ErrorAction SilentlyContinue
```

3. **Nettoyage optionnel des artefacts de test générés** :
Si vous souhaitez libérer de l'espace disque local, vous pouvez supprimer optionnellement les dossiers de rapports générés lors des tests :

```powershell
# Suppression optionnelle et ciblée des seuls dossiers de rapports générés
if (Test-Path playwright-report) { Remove-Item -Recurse -Force playwright-report }
if (Test-Path test-results) { Remove-Item -Recurse -Force test-results }
if (Test-Path .lighthouseci) { Remove-Item -Recurse -Force .lighthouseci }
```
