<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p>

<p align="center">
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
</p>

## About Laravel

Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:

- [Simple, fast routing engine](https://laravel.com/docs/routing).
- [Powerful dependency injection container](https://laravel.com/docs/container).
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
- [Robust background job processing](https://laravel.com/docs/queues).
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).

Laravel is accessible, powerful, and provides tools required for large, robust applications.

## Learning Laravel

Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.

In addition, [Laracasts](https://laracasts.com) contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.

You can also watch bite-sized lessons with real-world projects on [Laravel Learn](https://laravel.com/learn), where you will be guided through building a Laravel application from scratch while learning PHP fundamentals.

## Agentic Development

Laravel's predictable structure and conventions make it ideal for AI coding agents like Claude Code, Cursor, and GitHub Copilot. Install [Laravel Boost](https://laravel.com/docs/ai) to supercharge your AI workflow:

```bash
composer require laravel/boost --dev

php artisan boost:install
```

Boost provides your agent 15+ tools and skills that help agents build Laravel applications while following best practices.

## Contributing

Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).

## Code of Conduct

In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).

## Security Vulnerabilities

If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.

## License

The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
## API mobile - mode visite

La réponse de la visite active expose les identifiants des attractions validées par l’utilisateur connecté afin d’alimenter le tableau de bord de visite de l’application mobile.


## API mobile - carte parc / POI

`GET /api/v1/parks/{park}/map?locale=fr` expose uniquement les attractions et POI publiés avec leurs coordonnées, catégories et données Live utiles à la carte mobile. Cette route ne renvoie aucune position utilisateur ou de groupe.

## API mobile - invitations et propositions de groupe

Les routes authentifiées de groupe permettent au propriétaire d’inviter individuellement ses amis et aux membres actifs de proposer des activités pour une visite de groupe : attraction/coaster, repas, rendez-vous ou activité libre.

Les réponses aux propositions sont stockées par membre (`going`, `maybe`, `declined`). Les rendez-vous exigent un lieu et une heure. Le partage de position reste entièrement séparé et strictement limité aux membres du groupe.

## v1.122.1 — fondations V1 mobile

- Une validation GPS d’attraction crée un passage distinct à chaque tour, tout en conservant une seule première validation pour le déblocage de carte.
- L’API de visite expose `ride_counts` afin d’afficher le nombre de passages par attraction.
- Les rôles de groupe sont normalisés en `owner` / `member` ; les anciens rôles `admin` sont convertis en `member` par migration et seul l’owner gère le groupe.
- Le partage de position exige une visite de groupe active, acceptée et GPS-validée. Les positions Live sont supprimées lorsque la visite est terminée ou annulée.


## v1.123.0 — API Explorer mobile et favoris

- `GET /api/v1/parks` expose désormais `latitude` et `longitude` afin d’alimenter le globe Explorer mobile.
- Nouvelles routes authentifiées mobiles : `GET /api/v1/favorites` et `POST /api/v1/favorites/{type}/{id}`.
- Les favoris restent stockés dans `user_favorites` et compatibles avec le site web existant.

## v1.124.0 — démarrage explicite Solo / Groupe pour l’app mobile

- `POST /api/v1/parks/{park}/visits/start` accepte désormais `mode=solo|group|auto` ; `auto` conserve le contrat historique pour les anciens appels mobiles.
- `mode=solo` démarre ou reprend uniquement une visite personnelle et n’inscrit plus implicitement l’utilisateur à une visite de groupe disponible.
- `mode=group` exige `group_id`, une appartenance active au groupe et une validation GPS du parc. Une visite du groupe déjà planifiée pour la journée est réutilisée.
- Si aucune visite du groupe n’existe pour la journée, seul le propriétaire du groupe peut la créer depuis l’app ; les autres membres sont invités et le propriétaire est accepté comme organisateur.
- Le choix Solo / Groupe n’active aucun partage de position : le consentement de localisation de groupe reste géré séparément par les routes privées existantes.
- Aucun changement de schéma SQL.


## v1.125.0 — récapitulatif et historique des visites mobiles

- `GET /api/v1/visits/history` expose jusqu’aux 30 dernières visites consultables par l’utilisateur authentifié ayant des passages enregistrés.
- `GET /api/v1/visits/{visit}/summary` expose le récapitulatif personnel d’une visite accessible à l’utilisateur.
- `POST /api/v1/visits/{visit}/finish` renvoie maintenant le récapitulatif de la visite clôturée.
- Les statistiques sont calculées uniquement à partir des passages validés de l’utilisateur connecté ; les passages des autres membres d’un groupe ne sont jamais inclus.
- Aucun changement de schéma SQL.

## v1.129.1 — session mobile unique

L'API mobile applique une seule session active par compte. Toute nouvelle connexion dans l'application révoque les jetons mobiles précédents du même utilisateur. La création du jeton est sérialisée par transaction/verrou utilisateur pour conserver cette garantie même lors de connexions simultanées. Les sessions Web du site restent indépendantes.

## v1.130.0 — statuts personnels des parcs pour Explorer mobile

La route authentifiée `GET /api/v1/parks/user-statuses` alimente les nouveaux filtres Explorer de l’application mobile : parcs déjà visités, parcs à faire et visites programmées. Les visites validées par GPS (ou override admin) servent de référence pour les parcs déjà faits ; les parcs à faire proviennent de la wishlist restante ; les visites futures au statut `planned` alimentent les parcs programmés.

Aucune migration SQL n’est requise.

## v1.130.1 — catégorie des parcs exposée à l’app mobile

Les réponses `GET /api/v1/parks` et `GET /api/v1/parks/{park}` exposent désormais le champ `park_type`, basé sur la classification existante du catalogue (`theme_park`, `water_park`, `zoo`, `resort`, `other`). Ce champ alimente le nouveau filtre Catégorie d’Explorer mobile.

Aucune migration SQL n’est requise.

## v1.131.0 — historique mobile complet

`GET /api/v1/visits/history?compact=1` fournit désormais un index léger de l’historique complet pour le calendrier de l’application mobile v0.36.0. Le détail complet d’une visite continue d’être disponible via `GET /api/v1/visits/{visit}/summary`.

Aucune migration SQL n’est requise.
