69 lines
2.3 KiB
TypeScript
69 lines
2.3 KiB
TypeScript
import { Provider } from '@nestjs/common';
|
|
import { ProtestsService } from './ProtestsService';
|
|
|
|
// Import core interfaces
|
|
import type { Logger } from '@core/shared/application/Logger';
|
|
|
|
// Import concrete in-memory implementations
|
|
import { InMemoryProtestRepository } from '@adapters/racing/persistence/inmemory/InMemoryProtestRepository';
|
|
import { InMemoryRaceRepository } from '@adapters/racing/persistence/inmemory/InMemoryRaceRepository';
|
|
import { InMemoryLeagueMembershipRepository } from '@adapters/racing/persistence/inmemory/InMemoryLeagueMembershipRepository';
|
|
import { ConsoleLogger } from '@adapters/logging/ConsoleLogger';
|
|
|
|
// Import use cases
|
|
import { ReviewProtestUseCase } from '@core/racing/application/use-cases/ReviewProtestUseCase';
|
|
|
|
// Import presenters
|
|
import { ReviewProtestPresenter } from './presenters/ReviewProtestPresenter';
|
|
|
|
// Define injection tokens
|
|
export const PROTEST_REPOSITORY_TOKEN = 'IProtestRepository';
|
|
export const RACE_REPOSITORY_TOKEN = 'IRaceRepository';
|
|
export const LEAGUE_MEMBERSHIP_REPOSITORY_TOKEN = 'ILeagueMembershipRepository';
|
|
export const LOGGER_TOKEN = 'Logger';
|
|
export const REVIEW_PROTEST_PRESENTER_TOKEN = 'ReviewProtestPresenter';
|
|
|
|
export const ProtestsProviders: Provider[] = [
|
|
ProtestsService, // Provide the service itself
|
|
{
|
|
provide: PROTEST_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemoryProtestRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: RACE_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemoryRaceRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: LEAGUE_MEMBERSHIP_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemoryLeagueMembershipRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: LOGGER_TOKEN,
|
|
useClass: ConsoleLogger,
|
|
},
|
|
{
|
|
provide: REVIEW_PROTEST_PRESENTER_TOKEN,
|
|
useClass: ReviewProtestPresenter,
|
|
},
|
|
// Use cases
|
|
{
|
|
provide: ReviewProtestUseCase,
|
|
useFactory: (
|
|
protestRepo: any,
|
|
raceRepo: any,
|
|
leagueMembershipRepo: any,
|
|
logger: Logger,
|
|
output: ReviewProtestPresenter,
|
|
) => new ReviewProtestUseCase(protestRepo, raceRepo, leagueMembershipRepo, logger, output),
|
|
inject: [
|
|
PROTEST_REPOSITORY_TOKEN,
|
|
RACE_REPOSITORY_TOKEN,
|
|
LEAGUE_MEMBERSHIP_REPOSITORY_TOKEN,
|
|
LOGGER_TOKEN,
|
|
REVIEW_PROTEST_PRESENTER_TOKEN,
|
|
],
|
|
},
|
|
]; |