api client refactor

This commit is contained in:
2025-12-17 19:25:10 +01:00
parent 4177644b18
commit 26f7a2b6aa
27 changed files with 543 additions and 1329 deletions

View File

@@ -1,23 +1,46 @@
import { api as api } from '../../api';
import { presentRaceResultsDetail } from '../../presenters';
import { RaceResultsDetailPresenter, RaceWithSOFPresenter, ImportRaceResultsPresenter } from '../../presenters';
import { RaceResultsDetailViewModel } from '../../view-models';
export class RaceResultsService {
constructor(
private readonly apiClient = api.races,
private readonly resultsDetailPresenter = new RaceResultsDetailPresenter(),
private readonly sofPresenter = new RaceWithSOFPresenter(),
private readonly importPresenter = new ImportRaceResultsPresenter()
) {}
async importRaceResults(raceId: string, input: any): Promise<any> {
const dto = await this.apiClient.importResults(raceId, input);
return this.importPresenter.present(dto);
}
async getResultsDetail(raceId: string, currentUserId?: string): Promise<RaceResultsDetailViewModel> {
const dto = await this.apiClient.getResultsDetail(raceId);
return this.resultsDetailPresenter.present(dto, currentUserId);
}
async getWithSOF(raceId: string): Promise<any> {
const dto = await this.apiClient.getWithSOF(raceId);
return this.sofPresenter.present(dto);
}
}
// Singleton instance
export const raceResultsService = new RaceResultsService();
// Backward compatibility functions
export async function getRaceResults(
raceId: string,
currentUserId?: string
): Promise<RaceResultsDetailViewModel> {
const dto = await api.races.getResultsDetail(raceId);
return presentRaceResultsDetail(dto, currentUserId);
return raceResultsService.getResultsDetail(raceId, currentUserId);
}
export async function getRaceSOF(raceId: string): Promise<any> {
const dto = await api.races.getWithSOF(raceId);
// TODO: use presenter
return dto;
return raceResultsService.getWithSOF(raceId);
}
export async function importRaceResults(raceId: string, input: any): Promise<any> {
const dto = await api.races.importResults(raceId, input);
// TODO: use presenter
return dto;
return raceResultsService.importRaceResults(raceId, input);
}

View File

@@ -1,22 +1,48 @@
import { api as api } from '../../api';
import { presentRaceDetail } from '../../presenters';
import { RaceDetailPresenter } from '../../presenters';
import { RaceDetailViewModel } from '../../view-models';
export class RaceService {
constructor(
private readonly apiClient = api.races,
private readonly presenter = new RaceDetailPresenter()
) {}
async getRaceDetail(
raceId: string,
driverId: string
): Promise<RaceDetailViewModel> {
const dto = await this.apiClient.getDetail(raceId, driverId);
return this.presenter.present(dto);
}
async getRacesPageData(): Promise<any> {
const dto = await this.apiClient.getPageData();
// TODO: use presenter
return dto;
}
async getRacesTotal(): Promise<any> {
const dto = await this.apiClient.getTotal();
return dto;
}
}
// Singleton instance
export const raceService = new RaceService();
// Backward compatibility functions
export async function getRaceDetail(
raceId: string,
driverId: string
): Promise<RaceDetailViewModel> {
const dto = await api.races.getDetail(raceId, driverId);
return presentRaceDetail(dto);
return raceService.getRaceDetail(raceId, driverId);
}
export async function getRacesPageData(): Promise<any> {
const dto = await api.races.getPageData();
// TODO: use presenter
return dto;
return raceService.getRacesPageData();
}
export async function getRacesTotal(): Promise<any> {
const dto = await api.races.getTotal();
return dto;
return raceService.getRacesTotal();
}

View File

@@ -0,0 +1,7 @@
// Export the class-based service
export { RaceService, raceService } from './RaceService';
export { RaceResultsService, raceResultsService } from './RaceResultsService';
// Export backward compatibility functions
export { getRaceDetail, getRacesPageData, getRacesTotal } from './RaceService';
export { getRaceResults, getRaceSOF, importRaceResults } from './RaceResultsService';