import { RacesApiClient } from '../../api/races/RacesApiClient'; import { ProtestsApiClient } from '../../api/protests/ProtestsApiClient'; import { PenaltiesApiClient } from '../../api/penalties/PenaltiesApiClient'; import { RaceStewardingViewModel } from '../../view-models/RaceStewardingViewModel'; /** * Race Stewarding Service * * Orchestrates race stewarding operations by coordinating API calls for race details, * protests, and penalties, and returning a unified view model. */ export class RaceStewardingService { constructor( private readonly racesApiClient: RacesApiClient, private readonly protestsApiClient: ProtestsApiClient, private readonly penaltiesApiClient: PenaltiesApiClient ) {} /** * Get race stewarding data with view model transformation */ async getRaceStewardingData(raceId: string, driverId: string): Promise { // Fetch all data in parallel const [raceDetail, protests, penalties] = await Promise.all([ this.racesApiClient.getDetail(raceId, driverId), this.protestsApiClient.getRaceProtests(raceId), this.penaltiesApiClient.getRacePenalties(raceId), ]); return new RaceStewardingViewModel({ raceDetail, protests, penalties, }); } }