# Installation — Coaster World v1.73.2

La v1.73.2 renforce la résilience du Live en reprenant le système de synchronisation à la demande de l’ancien Coaster World.

## 1. Mettre à jour les fichiers

Remplace les fichiers par ceux de la v1.73.2 puis, depuis un terminal Laragon :

```bat
cd C:\laragon\www\coaster-world
php artisan optimize:clear
```

Aucune migration SQL n’est nécessaire.

## 2. Tester automatiquement le PHP utilisé par la tâche Windows

Ouvre :

```text
C:\laragon\www\coaster-world\tools
```

puis lance :

```bat
run_scheduler_windows.bat --check
```

Le résultat attendu contient notamment :

```text
PHP selectionne : C:\laragon\bin\php\...\php.exe
PHP 8.3.x (ou plus récent compatible)
pdo_mysql OK
```

puis la liste des tâches Laravel.

Si le script ne trouve aucun PHP 8.3+ avec `pdo_mysql`, il s’arrête avec une erreur au lieu d’utiliser un mauvais PHP.

## 3. Remplacer la tâche Scheduler Windows existante

Fais un clic droit **Exécuter en tant qu’administrateur** sur :

```text
C:\laragon\www\coaster-world\tools\install_scheduler_windows.bat
```

Le script vérifie d’abord PHP, puis recrée/remplace :

```text
Coaster World Laravel Scheduler
```

La tâche lance Laravel toutes les minutes sous SYSTEM.

## 4. Vérifier Windows

Dans PowerShell administrateur :

```powershell
schtasks /run /TN "Coaster World Laravel Scheduler"
```

puis environ 10 secondes après :

```powershell
schtasks /query /TN "Coaster World Laravel Scheduler" /V /FO LIST
```

Le résultat doit indiquer :

```text
Dernier résultat : 0
```

Le journal Laravel/Windows est disponible dans :

```text
storage\logs\scheduler-task.log
```

## 5. Vérifier Coaster World

Ouvre :

```text
http://coaster-world.test/admin
```

Dans **Supervision Live**, le scheduler doit passer actif après quelques minutes.

Même si le scheduler est momentanément arrêté, les fiches parc consultées continuent désormais à pouvoir synchroniser leur propre Live lorsqu’une nouvelle fenêtre de 5 minutes est disponible.

## 6. Synchronisation manuelle

Respect de la fenêtre normale :

```bat
php artisan cw:live:sync --all
```

Forcer réellement tous les appels upstream pour un diagnostic ponctuel :

```bat
php artisan cw:live:sync --all --force
```

N’utilise pas `--force` de manière planifiée.

## Fonctionnement final

- navigateur → API Coaster World : toutes les 30 s ;
- API Coaster World → ThemeParks.wiki : seulement lorsque la fenêtre ~5 min est due ;
- scheduler global : toutes les 5 min pour les parcs utiles ;
- verrou MySQL partagé par parc : pas de double appel entre scheduler et visiteurs ;
- ouverture/fermeture : recalcul local à chaque réponse Live ;
- horaires : revérification périodique de la source.

## Base de données

Aucune migration SQL. Ne lance pas `migrate:fresh`.
