Files
gridpilot.gg/apps/website/lib/gateways/api/protests/ProtestsApiClient.ts
2026-01-24 12:47:49 +01:00

44 lines
1.7 KiB
TypeScript

import type { ApplyPenaltyCommandDTO } from '../../../types/generated/ApplyPenaltyCommandDTO';
import type { LeagueAdminProtestsDTO } from '../../../types/generated/LeagueAdminProtestsDTO';
import type { RaceProtestsDTO } from '../../../types/generated/RaceProtestsDTO';
import type { RequestProtestDefenseCommandDTO } from '../../../types/generated/RequestProtestDefenseCommandDTO';
import type { ReviewProtestCommandDTO } from '../../../types/generated/ReviewProtestCommandDTO';
import { BaseApiClient } from '../base/BaseApiClient';
/**
* Protests API Client
*
* Handles all protest-related API operations.
*/
export class ProtestsApiClient extends BaseApiClient {
/** Get protests for a league */
getLeagueProtests(leagueId: string): Promise<LeagueAdminProtestsDTO> {
return this.get<LeagueAdminProtestsDTO>(`/leagues/${leagueId}/protests`);
}
/** Get a specific protest for a league */
getLeagueProtest(leagueId: string, protestId: string): Promise<LeagueAdminProtestsDTO> {
return this.get<LeagueAdminProtestsDTO>(`/leagues/${leagueId}/protests/${protestId}`);
}
/** Apply a penalty */
applyPenalty(input: ApplyPenaltyCommandDTO): Promise<void> {
return this.post<void>('/races/penalties/apply', input);
}
/** Request protest defense */
requestDefense(input: RequestProtestDefenseCommandDTO): Promise<void> {
return this.post<void>('/races/protests/defense/request', input);
}
/** Review protest */
reviewProtest(input: ReviewProtestCommandDTO): Promise<void> {
return this.post<void>(`/protests/${input.protestId}/review`, input);
}
/** Get protests for a race */
getRaceProtests(raceId: string): Promise<RaceProtestsDTO> {
return this.get<RaceProtestsDTO>(`/races/${raceId}/protests`);
}
}