53 lines
2.0 KiB
TypeScript
53 lines
2.0 KiB
TypeScript
import { Provider } from '@nestjs/common';
|
|
import { RaceService } from './RaceService';
|
|
|
|
// Import core interfaces
|
|
import { Logger } from '@core/shared/application/Logger';
|
|
import { IRaceRepository } from '@core/racing/domain/repositories/IRaceRepository';
|
|
import { ILeagueRepository } from '@core/racing/domain/repositories/ILeagueRepository';
|
|
|
|
// Import concrete in-memory implementations
|
|
import { InMemoryRaceRepository } from '@adapters/racing/persistence/inmemory/InMemoryRaceRepository';
|
|
import { InMemoryLeagueRepository } from '@adapters/racing/persistence/inmemory/InMemoryLeagueRepository';
|
|
import { ConsoleLogger } from '@adapters/logging/ConsoleLogger';
|
|
|
|
// Import use cases
|
|
import { GetAllRacesUseCase } from '@core/racing/application/use-cases/GetAllRacesUseCase';
|
|
import { GetTotalRacesUseCase } from '@core/racing/application/use-cases/GetTotalRacesUseCase';
|
|
import { ImportRaceResultsApiUseCase } from '@core/racing/application/use-cases/ImportRaceResultsApiUseCase';
|
|
|
|
// Define injection tokens
|
|
export const RACE_REPOSITORY_TOKEN = 'IRaceRepository';
|
|
export const LEAGUE_REPOSITORY_TOKEN = 'ILeagueRepository';
|
|
export const LOGGER_TOKEN = 'Logger';
|
|
|
|
export const RaceProviders: Provider[] = [
|
|
RaceService,
|
|
{
|
|
provide: RACE_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemoryRaceRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: LEAGUE_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemoryLeagueRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: LOGGER_TOKEN,
|
|
useClass: ConsoleLogger,
|
|
},
|
|
// Use cases
|
|
{
|
|
provide: GetAllRacesUseCase,
|
|
useFactory: (raceRepo: IRaceRepository, leagueRepo: ILeagueRepository) => new GetAllRacesUseCase(raceRepo, leagueRepo),
|
|
inject: [RACE_REPOSITORY_TOKEN, LEAGUE_REPOSITORY_TOKEN],
|
|
},
|
|
{
|
|
provide: GetTotalRacesUseCase,
|
|
useFactory: (raceRepo: IRaceRepository) => new GetTotalRacesUseCase(raceRepo),
|
|
inject: [RACE_REPOSITORY_TOKEN],
|
|
},
|
|
ImportRaceResultsApiUseCase,
|
|
];
|