36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
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<RaceStewardingViewModel> {
|
|
// 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,
|
|
});
|
|
}
|
|
} |