import { BaseApiClient } from '../base/BaseApiClient'; import type { AllLeaguesWithCapacityDto, LeagueStatsDto, LeagueStandingsDto, LeagueScheduleDto, LeagueMembershipsDto, CreateLeagueInputDto, CreateLeagueOutputDto, } from '../../dtos'; /** * Leagues API Client * * Handles all league-related API operations. */ export class LeaguesApiClient extends BaseApiClient { /** Get all leagues with capacity information */ getAllWithCapacity(): Promise { return this.get('/leagues/all-with-capacity'); } /** Get total number of leagues */ getTotal(): Promise { return this.get('/leagues/total-leagues'); } /** Get league standings */ getStandings(leagueId: string): Promise { return this.get(`/leagues/${leagueId}/standings`); } /** Get league schedule */ getSchedule(leagueId: string): Promise { return this.get(`/leagues/${leagueId}/schedule`); } /** Get league memberships */ getMemberships(leagueId: string): Promise { return this.get(`/leagues/${leagueId}/memberships`); } /** Create a new league */ create(input: CreateLeagueInputDto): Promise { return this.post('/leagues', input); } /** Remove a member from league */ removeMember(leagueId: string, performerDriverId: string, targetDriverId: string): Promise<{ success: boolean }> { return this.patch<{ success: boolean }>(`/leagues/${leagueId}/members/${targetDriverId}/remove`, { performerDriverId }); } /** Get league seasons */ getSeasons(leagueId: string): Promise<{ seasons: Array<{ id: string; status: string }> }> { return this.get<{ seasons: Array<{ id: string; status: string }> }>(`/leagues/${leagueId}/seasons`); } /** Get season sponsorships */ getSeasonSponsorships(seasonId: string): Promise<{ sponsorships: Array<{ sponsorId: string; tier: string; status: string }> }> { return this.get<{ sponsorships: Array<{ sponsorId: string; tier: string; status: string }> }>(`/seasons/${seasonId}/sponsorships`); } /** Get league config */ getLeagueConfig(leagueId: string): Promise<{ config: any }> { return this.get<{ config: any }>(`/leagues/${leagueId}/config`); } /** Get league scoring presets */ getScoringPresets(): Promise<{ presets: any[] }> { return this.get<{ presets: any[] }>(`/leagues/scoring-presets`); } /** Transfer league ownership */ transferOwnership(leagueId: string, currentOwnerId: string, newOwnerId: string): Promise<{ success: boolean }> { return this.post<{ success: boolean }>(`/leagues/${leagueId}/transfer-ownership`, { currentOwnerId, newOwnerId, }); } }