Accès public aux parties
Vue d'ensemble
Les utilisateurs non authentifiés peuvent consulter la liste des parties publiques et leurs détails. Ce mécanisme encourage les visiteurs à s'inscrire en leur montrant l'activité de la plateforme avant de créer un compte.
Règles métier
Consultation publique
| Règle | Description |
| R-PUB-01 | L'endpoint GET /api/v1/games est accessible sans authentification |
| R-PUB-02 | L'endpoint GET /api/v1/games/{id} est accessible sans authentification |
| R-PUB-03 | Les données sensibles (emails, numéros de téléphone) ne sont pas exposées dans les réponses publiques |
| R-PUB-04 | Les actions (rejoindre, créer, modifier) nécessitent une authentification |
Redirection post-authentification
| Règle | Description |
| R-REDIR-01 | Lorsqu'un utilisateur non authentifié tente une action protégée, l'URL cible est sauvegardée dans le sessionStorage |
| R-REDIR-02 | Après authentification réussie (login + OTP), l'utilisateur est redirigé vers l'URL sauvegardée |
| R-REDIR-03 | Si aucune URL n'est sauvegardée, la redirection par défaut est /player/matches |
| R-REDIR-04 | L'URL sauvegardée est consommée (supprimée) après utilisation pour éviter les redirections parasites |
| R-REDIR-05 | Le mécanisme de sauvegarde utilise sessionStorage (pas localStorage) pour ne pas persister entre sessions |
Persistance JWT
| Règle | Description |
| R-JWT-01 | Le token JWT est stocké dans localStorage et restauré au chargement de l'application |
| R-JWT-02 | En cas de token expiré (erreur 401), un refresh automatique est tenté via POST /api/v1/auth/refresh |
| R-JWT-03 | Si le refresh échoue, l'utilisateur est déconnecté et redirigé vers /login |
Pages publiques
/games — Liste des parties
- Affiche toutes les parties publiques ouvertes
- Filtres : type (amical/compétitif), environnement (indoor/outdoor/semi-couvert)
- Tri : par date ou par distance (nécessite la géolocalisation)
- Recherche textuelle par nom de club ou lieu
- Vue liste et vue carte
- Bannière d'incitation à s'inscrire pour les utilisateurs non connectés
- Bouton "Rejoindre" redirige vers
/signup avec sauvegarde de l'URL cible
/games/:id — Détail d'une partie
- Affiche les informations complètes : lieu, date, durée, niveau, joueurs inscrits
- Indicateur de réservation de terrain
- Fiche des joueurs (prénom, initiale du nom, niveau)
- CTA d'inscription/connexion pour les non-authentifiés
- Bouton "Voir le détail complet" pour les utilisateurs authentifiés