import { RacesApiClient } from '../../api/races/RacesApiClient'; import { RaceResultsDetailViewModel } from '../../view-models/RaceResultsDetailViewModel'; // TODO: Move these types to apps/website/lib/types/generated when available type ImportRaceResultsInputDto = { raceId: string; results: Array }; // Note: RaceWithSOFViewModel and ImportRaceResultsSummaryViewModel are defined in presenters // These will need to be converted to proper view models type RaceWithSOFViewModel = any; // TODO: Create proper view model type ImportRaceResultsSummaryViewModel = any; // TODO: Create proper view model /** * Race Results Service * * Orchestrates race results operations including viewing, importing, and SOF calculations. * All dependencies are injected via constructor. */ export class RaceResultsService { constructor( private readonly apiClient: RacesApiClient ) {} /** * Get race results detail with view model transformation */ async getResultsDetail(raceId: string, currentUserId?: string): Promise { const dto = await this.apiClient.getResultsDetail(raceId); return new RaceResultsDetailViewModel(dto, currentUserId || ''); } /** * Get race with strength of field calculation * TODO: Create RaceWithSOFViewModel and use it here */ async getWithSOF(raceId: string): Promise { const dto = await this.apiClient.getWithSOF(raceId); return dto; // TODO: return new RaceWithSOFViewModel(dto); } /** * Import race results and get summary * TODO: Create ImportRaceResultsSummaryViewModel and use it here */ async importResults(raceId: string, input: ImportRaceResultsInputDto): Promise { const dto = await this.apiClient.importResults(raceId, input); return dto; // TODO: return new ImportRaceResultsSummaryViewModel(dto); } }