api client refactor
This commit is contained in:
@@ -2,15 +2,42 @@ import { api as api } from '../../api';
|
||||
import { presentDriversLeaderboard } from '../../presenters';
|
||||
import { DriverLeaderboardViewModel } from '../../view-models';
|
||||
|
||||
/**
|
||||
* Driver Service
|
||||
*
|
||||
* Handles driver-related operations including profiles, leaderboards, and onboarding.
|
||||
*/
|
||||
export class DriverService {
|
||||
constructor(
|
||||
private readonly apiClient = api.drivers
|
||||
) {}
|
||||
|
||||
async getDriverLeaderboard(): Promise<DriverLeaderboardViewModel> {
|
||||
const dto = await this.apiClient.getLeaderboard();
|
||||
return presentDriversLeaderboard(dto);
|
||||
}
|
||||
|
||||
async completeDriverOnboarding(input: any): Promise<any> {
|
||||
return await this.apiClient.completeOnboarding(input);
|
||||
}
|
||||
|
||||
async getCurrentDriver(): Promise<any> {
|
||||
return await this.apiClient.getCurrent();
|
||||
}
|
||||
}
|
||||
|
||||
// Singleton instance
|
||||
export const driverService = new DriverService();
|
||||
|
||||
// Backward compatibility functional exports
|
||||
export async function getDriverLeaderboard(): Promise<DriverLeaderboardViewModel> {
|
||||
const dto = await api.drivers.getLeaderboard();
|
||||
return presentDriversLeaderboard(dto);
|
||||
return driverService.getDriverLeaderboard();
|
||||
}
|
||||
|
||||
export async function completeDriverOnboarding(input: any): Promise<any> {
|
||||
return await api.drivers.completeOnboarding(input);
|
||||
return driverService.completeDriverOnboarding(input);
|
||||
}
|
||||
|
||||
export async function getCurrentDriver(): Promise<any> {
|
||||
return await api.drivers.getCurrent();
|
||||
return driverService.getCurrentDriver();
|
||||
}
|
||||
6
apps/website/lib/services/drivers/index.ts
Normal file
6
apps/website/lib/services/drivers/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
// Export the class-based service
|
||||
export { DriverService, driverService } from './DriverService';
|
||||
|
||||
// Export backward compatibility functions
|
||||
export { getDriverLeaderboard, completeDriverOnboarding, getCurrentDriver } from './DriverService';
|
||||
export { registerDriver, getDriverRegistrationStatus } from './DriverRegistrationService';
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
7
apps/website/lib/services/races/index.ts
Normal file
7
apps/website/lib/services/races/index.ts
Normal 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';
|
||||
Reference in New Issue
Block a user