Aller au contenu

🏅 API Profil joueur

Endpoints

Tous les endpoints nécessitent une authentification JWT.


GET /api/v1/profile/statistics

Retourne les statistiques personnelles du joueur connecté.

Response 200 :

{
    "data": {
        "total_matches": 12,
        "wins": 8,
        "losses": 4,
        "ratio": 66.7,
        "level_history": [
            { "date": "2026-03-01", "level": 3.5 },
            { "date": "2026-03-08", "level": 4.0 }
        ]
    }
}
Champ Type Description
total_matches integer Nombre total de parties validées
wins integer Nombre de victoires
losses integer Nombre de défaites
ratio float Ratio de victoire en pourcentage
level_history array Points d'évolution du niveau

GET /api/v1/profile/history

Retourne l'historique paginé des parties du joueur.

Paramètres :

Paramètre Type Défaut Description
page integer 1 Numéro de la page
per_page integer 10 Nombre d'éléments par page

Response 200 :

{
    "data": [
        {
            "id": 1,
            "type": "competitive",
            "scheduled_at": "2026-03-05T18:30:00Z",
            "duration_minutes": 90,
            "location_type": "club",
            "club": { "id": 1, "name": "Padel Horizon" },
            "custom_location": null,
            "status": "score_validated",
            "player_team": "A",
            "winning_team": "A",
            "is_winner": true,
            "score_validated": true,
            "sets_count": 2,
            "scores": [
                { "set_number": 1, "team_a_score": 6, "team_b_score": 4 },
                { "set_number": 2, "team_a_score": 7, "team_b_score": 5 }
            ],
            "opponents": [
                {
                    "id": 2,
                    "first_name": "Pierre",
                    "last_name": "Martin",
                    "avatar_url": null,
                    "level": 3.5
                }
            ]
        }
    ],
    "meta": {
        "current_page": 1,
        "last_page": 3,
        "per_page": 10,
        "total": 25
    }
}

GET /api/v1/profile/favorite-clubs

Retourne la liste des clubs favoris du joueur.

Response 200 :

{
    "data": [
        {
            "id": 1,
            "name": "Padel Club Paris",
            "city": "Paris",
            "address": "12 rue du Padel",
            "logo_url": "/storage/clubs/logo-1.jpg"
        }
    ]
}

POST /api/v1/clubs/{club}/favorite

Ajoute un club aux favoris du joueur.

Response 200 :

{
    "message": "Club ajouté aux favoris."
}

Response 422 (club déjà en favoris) :

{
    "message": "Ce club est déjà dans vos favoris."
}

DELETE /api/v1/clubs/{club}/favorite

Retire un club des favoris du joueur.

Response 200 :

{
    "message": "Club retiré des favoris."
}

Response 422 (club non en favoris) :

{
    "message": "Ce club n'est pas dans vos favoris."
}

Implémentation

Backend

  • Service : App\Domain\Profile\Services\ProfileService
  • Controller : App\Http\Controllers\Api\V1\ProfileController
  • Migration : create_user_favorite_clubs_table (table pivot)
  • Relation : User::favoriteClubs() (BelongsToMany)

Frontend

  • Types : src/types/profile.ts
  • Service : src/services/profileService.ts
  • Hooks : usePlayerStatistics, useMatchHistory, useFavoriteClubs
  • Pages : ProfilePage.tsx (stats + favoris), ActivitiesPage.tsx (historique)