Files
gridpilot.gg/apps/website/lib/di/modules/race.module.ts
2026-01-06 19:36:03 +01:00

47 lines
1.7 KiB
TypeScript

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<RaceService>(RACE_SERVICE_TOKEN)
.toDynamicValue((ctx) => {
const raceApiClient = ctx.get<RacesApiClient>(RACE_API_CLIENT_TOKEN);
return new RaceService(raceApiClient);
})
.inSingletonScope();
// Race Results Service
bind<RaceResultsService>(RACE_RESULTS_SERVICE_TOKEN)
.toDynamicValue((ctx) => {
const raceApiClient = ctx.get<RacesApiClient>(RACE_API_CLIENT_TOKEN);
return new RaceResultsService(raceApiClient);
})
.inSingletonScope();
// Race Stewarding Service
bind<RaceStewardingService>(RACE_STEWARDING_SERVICE_TOKEN)
.toDynamicValue((ctx) => {
const raceApiClient = ctx.get<RacesApiClient>(RACE_API_CLIENT_TOKEN);
const protestApiClient = ctx.get<ProtestsApiClient>(PROTEST_API_CLIENT_TOKEN);
const penaltyApiClient = ctx.get<PenaltiesApiClient>(PENALTY_API_CLIENT_TOKEN);
return new RaceStewardingService(raceApiClient, protestApiClient, penaltyApiClient);
})
.inSingletonScope();
});