Règles métier — Clubs & Terrains
Ce document décrit les règles métier du domaine Clubs. Ces règles définissent le comportement du système de gestion des clubs et de leurs terrains (pistes) de padel.
Inscription et revendication de club
RB-CLUB-001 — Création d'un club
- Tout utilisateur authentifié peut créer un club en renseignant au minimum : nom, adresse et ville.
- Le club est créé avec le statut
pending (en attente de validation par un administrateur). - L'utilisateur devient automatiquement propriétaire (
owner_id) du club. - Si l'utilisateur avait le rôle
player, il est promu au rôle club_manager.
RB-CLUB-002 — Revendication d'un club existant
- Un utilisateur peut revendiquer un club existant qui n'a pas de propriétaire (
owner_id IS NULL). - La revendication passe le club en statut
pending pour validation. - L'utilisateur est promu
club_manager (mêmes règles que la création). - Un club déjà revendiqué (avec
owner_id) ne peut pas être revendiqué par un autre utilisateur (erreur 409).
RB-CLUB-003 — Statuts de club
| Statut | Description |
pending | En attente de validation par un administrateur |
validated | Club validé et visible publiquement |
suspended | Club suspendu par un administrateur |
RB-CLUB-004 — Notifications d'inscription
- Lorsqu'un club est créé ou revendiqué, tous les administrateurs reçoivent une notification de type
club_registration_received. - Après validation ou refus par l'administrateur, le gestionnaire reçoit une notification (
club_validated ou club_rejected).
Consultation des clubs
RB-CLUB-010 — Liste publique
- Seuls les clubs avec le statut
validated sont affichés dans la liste publique. - La recherche filtre sur le nom et la ville du club (recherche insensible à la casse).
RB-CLUB-011 — Fiche club (détail)
- La page de détail d'un club affiche :
- Informations générales (nom, adresse, ville, horaires d'ouverture)
- Coordonnées de contact (téléphone, email, site web)
- Description
- Liste des terrains actifs
- (À venir) Parties à venir dans ce club
- La fiche est accessible publiquement sans authentification.
RB-CLUB-012 — Clubs favoris
- Un joueur authentifié peut ajouter/retirer un club de ses favoris depuis la fiche club.
- Les clubs favoris sont utilisés pour recommander des parties.
Gestion des terrains (pistes)
RB-TERRAIN-001 — Types de terrains
Les terrains de padel sont classés en trois types :
| Type | Libellé | Description |
indoor | Intérieur | Piste couverte (salle fermée) |
semi_covered | Semi-couvert | Piste partiellement couverte (toit, pas de murs) |
outdoor | Extérieur | Piste en plein air |
RB-TERRAIN-002 — Création de terrain
- Seul le propriétaire du club peut ajouter un terrain.
- Champs obligatoires : nom (1–100 caractères), type (indoor/semi_covered/outdoor).
- Champs optionnels : description (max 1000 caractères), prix par heure (0–9999.99 €), statut actif/inactif.
- Un terrain est actif par défaut à la création.
RB-TERRAIN-003 — Modification de terrain
- Seul le propriétaire du club peut modifier les informations d'un terrain.
- Un terrain peut être désactivé (masqué de la vue publique) sans être supprimé.
RB-TERRAIN-004 — Suppression de terrain
- Seul le propriétaire du club peut supprimer un terrain.
- La suppression est définitive.
RB-TERRAIN-005 — Visibilité
- Les joueurs voient uniquement les terrains actifs d'un club (vue publique).
- Le gestionnaire voit tous ses terrains (actifs et inactifs) dans l'interface de gestion.
Mes clubs (espace gestionnaire)
RB-CLUB-020 — Liste des clubs du gestionnaire
- Un gestionnaire peut consulter la liste de ses propres clubs (
owner_id = user.id). - Cette liste inclut les clubs de tous statuts (pending, validated, suspended).
RB-CLUB-021 — Logo de club
- Le propriétaire peut uploader un logo pour son club (formats : JPG, PNG, max 2 Mo).
- L'ancien logo est supprimé du stockage lors du remplacement.
Gestion des créneaux horaires
RB-CRENEAU-001 — Définition d'un créneau
- Un créneau représente un plage horaire récurrente associée à un club, optionnellement à un terrain spécifique.
- Champs obligatoires :
day_of_week (0=Lundi … 6=Dimanche), start_time (format HH:MM), end_time (HH:MM), duration_minutes. terrain_id est optionnel (null = valable pour tous les terrains du club). is_available (booléen, défaut : true) indique si le créneau est proposable à la réservation.
RB-CRENEAU-002 — Gestion des créneaux
- Seul le propriétaire du club peut créer, modifier ou supprimer des créneaux.
- La consultation des créneaux d'un club est publique (pas d'authentification requise).
- L'heure de fin doit être postérieure à l'heure de début.
RB-CRENEAU-003 — Marquage disponible/indisponible
- Le gestionnaire peut basculer
is_available sur un créneau sans le supprimer. - Un créneau indisponible n'est pas proposé aux joueurs pour la réservation.
Gestion des réservations
RB-RESERVATION-001 — Création d'une réservation
- Tout utilisateur authentifié peut créer une réservation sur un club validé.
- Champs obligatoires :
terrain_id, reserved_at (datetime ISO 8601), duration_minutes. - Le statut initial est toujours
pending. - Détection de conflit : si une réservation avec statut
pending ou accepted existe déjà pour le même terrain et créneau, la création est refusée (erreur 409).
RB-RESERVATION-002 — Statuts de réservation
| Statut | Description |
pending | En attente de traitement par le gestionnaire |
accepted | Réservation acceptée par le gestionnaire |
rejected | Réservation refusée par le gestionnaire |
cancelled | Réservation annulée (par le joueur ou le gestionnaire) |
RB-RESERVATION-003 — Traitement par le gestionnaire
- Seul le propriétaire du club peut accepter ou refuser une réservation.
- L'acceptation passe le statut à
accepted, le refus à rejected. - Le motif de refus (
reason) est obligatoire lors du refus. - Le joueur reçoit une notification à chaque changement de statut (
reservation_accepted, reservation_rejected).
RB-RESERVATION-004 — Annulation
- Le joueur ne peut annuler que ses propres réservations avec le statut
pending. - Le gestionnaire peut annuler n'importe quelle réservation de son club (statut
pending ou accepted). - Tout autre utilisateur se voit retourner une erreur 403.
RB-RESERVATION-005 — Historique
- Chaque utilisateur peut consulter la liste de ses propres réservations (
GET /api/v1/reservations/my), avec filtrage optionnel par statut. - Le gestionnaire peut consulter la liste de toutes les réservations de son club (
GET /api/v1/clubs/{club}/reservations), avec filtrage optionnel par statut.