import { ContainerModule } from 'inversify'; import { RaceService } from '@/lib/services/races/RaceService'; import { RaceResultsService } from '@/lib/services/races/RaceResultsService'; import { RaceStewardingService } from '@/lib/services/races/RaceStewardingService'; import { RacesApiClient } from '@/lib/api/races/RacesApiClient'; import { ProtestsApiClient } from '@/lib/api/protests/ProtestsApiClient'; import { PenaltiesApiClient } from '@/lib/api/penalties/PenaltiesApiClient'; import { RACE_SERVICE_TOKEN, RACE_RESULTS_SERVICE_TOKEN, RACE_STEWARDING_SERVICE_TOKEN, RACE_API_CLIENT_TOKEN, PROTEST_API_CLIENT_TOKEN, PENALTY_API_CLIENT_TOKEN } from '../tokens'; export const RaceModule = new ContainerModule((options) => { const bind = options.bind; // Race Service bind(RACE_SERVICE_TOKEN) .toDynamicValue((ctx) => { const raceApiClient = ctx.get(RACE_API_CLIENT_TOKEN); return new RaceService(raceApiClient); }) .inSingletonScope(); // Race Results Service bind(RACE_RESULTS_SERVICE_TOKEN) .toDynamicValue((ctx) => { const raceApiClient = ctx.get(RACE_API_CLIENT_TOKEN); return new RaceResultsService(raceApiClient); }) .inSingletonScope(); // Race Stewarding Service bind(RACE_STEWARDING_SERVICE_TOKEN) .toDynamicValue((ctx) => { const raceApiClient = ctx.get(RACE_API_CLIENT_TOKEN); const protestApiClient = ctx.get(PROTEST_API_CLIENT_TOKEN); const penaltyApiClient = ctx.get(PENALTY_API_CLIENT_TOKEN); return new RaceStewardingService(raceApiClient, protestApiClient, penaltyApiClient); }) .inSingletonScope(); });