website refactor

This commit is contained in:
2026-01-21 02:02:01 +01:00
parent c06f93f1b6
commit a6e93acb37
4 changed files with 57 additions and 49 deletions

View File

@@ -30,7 +30,7 @@ function isRecord(value: unknown): value is Record<string, unknown> {
function isRaceDTO(value: unknown): value is RaceDTO {
if (!isRecord(value)) return false;
return typeof value.id === 'string' && typeof value.name === 'string' && typeof value.date === 'string';
return typeof value.id === 'string' && typeof value.name === 'string';
}
function parseRaceDTOArray(value: unknown): RaceDTO[] {
@@ -71,8 +71,11 @@ export class LeaguesApiClient extends BaseApiClient {
}
/** Get league memberships */
getMemberships(leagueId: string): Promise<LeagueMembershipsDTO> {
return this.get<LeagueMembershipsDTO>(`/leagues/${leagueId}/memberships`);
async getMemberships(leagueId: string): Promise<LeagueMembershipsDTO> {
const response = await this.get<any>(`/leagues/${leagueId}/memberships`);
if (Array.isArray(response)) return { members: response };
if (response?.members) return response;
return { members: [] };
}
/** Create a new league */
@@ -160,8 +163,9 @@ export class LeaguesApiClient extends BaseApiClient {
/** Get races for a league */
async getRaces(leagueId: string): Promise<{ races: RaceDTO[] }> {
const response = await this.get<{ races?: unknown }>(`/leagues/${leagueId}/races`);
return { races: parseRaceDTOArray(response?.races) };
const response = await this.get<any>(`/leagues/${leagueId}/races`);
const races = Array.isArray(response) ? response : (response?.races || []);
return { races: parseRaceDTOArray(races) };
}
/** Admin roster: list current members (admin/owner only; actor derived from session) */