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, ];