🏅 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 :
Response 422 (club déjà en favoris) :
DELETE /api/v1/clubs/{club}/favorite¶
Retire un club des favoris du joueur.
Response 200 :
Response 422 (club non en 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)