# Installation — Coaster World v1.100.6

Base : `coaster-world_v1.100.5_2026-08-18.zip`

## Installation recommandée

1. Remplacer le projet par l'archive v1.100.6 en conservant le `.env` et les données/runtime propres au serveur.
2. Exécuter la migration :

```bash
php artisan migrate
```

3. Déplacer les anciens visuels de cartes du stockage public vers le stockage privé :

```bash
php artisan cw:cards:protect-media
```

Cette commande copie chaque fichier connu vers `storage/app/private/coaster-cards`, vérifie l'écriture puis supprime sa copie de `storage/app/public/coaster-cards`. Si un fichier référencé en base est déjà absent du serveur, la commande le signale ; il suffit alors de réimporter cette carte depuis l'administration.

4. Vider les caches Laravel :

```bash
php artisan optimize:clear
```

## Installation SQL manuelle

Si `php artisan migrate` ne peut pas être utilisé, exécuter **à la place** :

`database/migrations/sql/coaster_world_v1.100.6_cards_attractions.sql`

Ne pas exécuter la migration Laravel et le SQL manuel tous les deux.

La commande de protection des médias reste ensuite nécessaire :

```bash
php artisan cw:cards:protect-media
php artisan optimize:clear
```

## Vérification rapide

- Dans Administration > Cartes, la liste de création doit proposer deux groupes : Coasters et Attractions.
- En choisissant une entrée, la série doit se remplir automatiquement avec le nom du parc.
- Après réimport d'une carte, les fichiers doivent apparaître dans `storage/app/private/coaster-cards/...`.
- Le répertoire `storage/app/public/coaster-cards` doit être supprimé ou vide après `cw:cards:protect-media` si tous les anciens fichiers ont été déplacés.
- Sur téléphone, ouvrir une carte : le haut de la modale doit commencer sous le header et le contenu doit défiler jusqu'au bouton de retournement.
