Aller au contenu

Import des clubs Pista Padel

Contexte

L'application Primatch pré-charge une base de 1 169 clubs de padel en France, récupérés par reverse engineering de l'API publique de pista-padel.com. Ces clubs sont importés comme clubs validés sans propriétaire (status=validated, owner_id=null), prêts à être revendiqués par les gestionnaires via la fonctionnalité de claim.

Données source

Élément Détail
API source https://api.pista-padel.com/clubs?page={n}&limit=50
Script de collecte scripts/fetch_pista_clubs.py
Fichier JSON api/database/data/pista_clubs.json (aussi data/pista_clubs.json)
Seeder Laravel database/seeders/PistaClubSeeder.php

Structure d'un club dans le JSON

{
  "id": 150,
  "slug": "O44PLFM6",
  "name": "2V2 Padel Club",
  "shortName": "2V2 Padel Club",
  "description": null,
  "street": "1 Bd du Parisis ZAC des Bois Rochefort",
  "city": "Cormeilles-en-Parisis",
  "postalCode": "95240",
  "longitude": 2.187860099,
  "latitude": 48.9553068617,
  "indoor": 5,
  "semiCovered": 0,
  "outdoor": 0,
  "createdAt": "2025-10-21T17:48:37.000+00:00",
  "updatedAt": "2025-10-21T17:48:37.000+00:00",
  "logoPath": null,
  "bannerPath": null
}

Mapping Pista → Primatch

Champ Pista Champ Primatch (table clubs) Notes
name name
description description Renseigné pour ~38 clubs
street address Fallback sur city si vide
city city
postalCode postal_code
latitude latitude
longitude longitude
logoPath logo_url Chemin relatif Pista
bannerPath cover_url Chemin relatif Pista
indoor → Terrains type=indoor Génère N terrains
semiCovered → Terrains type=semi_covered Génère N terrains
outdoor → Terrains type=outdoor Génère N terrains
status Toujours validated
owner_id Toujours null (réclamable)

Procédure d'import

1. Récupérer les données (si besoin de rafraîchir)

# Depuis la racine du projet (sur l'hôte, pas dans Docker)
python3 scripts/fetch_pista_clubs.py

Le script pagine automatiquement l'API (50 clubs/page), gère les erreurs avec retry, et écrit le résultat dans data/pista_clubs.json.

2. Copier le JSON dans le dossier API

cp data/pista_clubs.json api/database/data/pista_clubs.json

3. Lancer le seeder

make shell-api
php artisan db:seed --class=PistaClubSeeder

Idempotent

Le seeder détecte les doublons par nom + ville et les ignore. Il est donc sûr de le relancer plusieurs fois.

Résultat attendu

Métrique Valeur
Clubs importés ~1 163
Clubs ignorés (doublons ou données invalides) ~6
Terrains indoor créés ~3 412
Terrains outdoor créés ~126
Terrains semi-couverts créés ~28

Statistiques des données

  • 1 008 villes uniques couvertes
  • 157 clubs avec un logo
  • 91 clubs avec une bannière
  • Top villes : Paris (7), Marseille (6), Nice (5), Toulouse (5), Tarbes (5)

Considérations

Images

Les champs logo_url et cover_url contiennent des chemins relatifs Pista (ex: clubs/k7r10je8/logo.png). Ils ne pointent pas vers des fichiers hébergés sur Primatch. Une migration des images sera nécessaire si l'on souhaite les afficher.

Terrains génériques

Les terrains sont créés avec des noms génériques (Terrain Indoor 1, Terrain Outdoor 2, etc.) car l'API Pista ne fournit que des compteurs, pas les détails individuels des terrains.