135 lines
7.2 KiB
TypeScript
135 lines
7.2 KiB
TypeScript
import { Provider } from '@nestjs/common';
|
|
import { SponsorService } from './SponsorService';
|
|
|
|
// Import core interfaces
|
|
import { ISponsorRepository } from '@core/racing/domain/repositories/ISponsorRepository';
|
|
import { ISeasonSponsorshipRepository } from '@core/racing/domain/repositories/ISeasonSponsorshipRepository';
|
|
import { ISeasonRepository } from '@core/racing/domain/repositories/ISeasonRepository';
|
|
import { ILeagueRepository } from '@core/racing/domain/repositories/ILeagueRepository';
|
|
import { ILeagueMembershipRepository } from '@core/racing/domain/repositories/ILeagueMembershipRepository';
|
|
import { IRaceRepository } from '@core/racing/domain/repositories/IRaceRepository';
|
|
import { ISponsorshipPricingRepository } from '@core/racing/domain/repositories/ISponsorshipPricingRepository';
|
|
import { ISponsorshipRequestRepository } from '@core/racing/domain/repositories/ISponsorshipRequestRepository';
|
|
import { Logger } from '@core/shared/application';
|
|
|
|
// Import use cases
|
|
import { GetSponsorshipPricingUseCase } from '@core/racing/application/use-cases/GetSponsorshipPricingUseCase';
|
|
import { GetSponsorsUseCase } from '@core/racing/application/use-cases/GetSponsorsUseCase';
|
|
import { CreateSponsorUseCase } from '@core/racing/application/use-cases/CreateSponsorUseCase';
|
|
import { GetSponsorDashboardUseCase } from '@core/racing/application/use-cases/GetSponsorDashboardUseCase';
|
|
import { GetSponsorSponsorshipsUseCase } from '@core/racing/application/use-cases/GetSponsorSponsorshipsUseCase';
|
|
import { GetEntitySponsorshipPricingUseCase } from '@core/racing/application/use-cases/GetEntitySponsorshipPricingUseCase';
|
|
|
|
// Import concrete in-memory implementations
|
|
import { InMemorySponsorRepository } from '@adapters/racing/persistence/inmemory/InMemorySponsorRepository';
|
|
import { InMemorySeasonSponsorshipRepository } from '@adapters/racing/persistence/inmemory/InMemorySeasonSponsorshipRepository';
|
|
import { InMemorySeasonRepository } from '@adapters/racing/persistence/inmemory/InMemorySeasonRepository';
|
|
import { InMemoryLeagueRepository } from '@adapters/racing/persistence/inmemory/InMemoryLeagueRepository';
|
|
import { InMemoryLeagueMembershipRepository } from '@adapters/racing/persistence/inmemory/InMemoryLeagueMembershipRepository';
|
|
import { InMemoryRaceRepository } from '@adapters/racing/persistence/inmemory/InMemoryRaceRepository';
|
|
import { InMemorySponsorshipPricingRepository } from '@adapters/racing/persistence/inmemory/InMemorySponsorshipPricingRepository';
|
|
import { InMemorySponsorshipRequestRepository } from '@adapters/racing/persistence/inmemory/InMemorySponsorshipRequestRepository';
|
|
import { ConsoleLogger } from '@adapters/logging/ConsoleLogger';
|
|
|
|
// Define injection tokens
|
|
export const SPONSOR_REPOSITORY_TOKEN = 'ISponsorRepository';
|
|
export const SEASON_SPONSORSHIP_REPOSITORY_TOKEN = 'ISeasonSponsorshipRepository';
|
|
export const SEASON_REPOSITORY_TOKEN = 'ISeasonRepository';
|
|
export const LEAGUE_REPOSITORY_TOKEN = 'ILeagueRepository';
|
|
export const LEAGUE_MEMBERSHIP_REPOSITORY_TOKEN = 'ILeagueMembershipRepository';
|
|
export const RACE_REPOSITORY_TOKEN = 'IRaceRepository';
|
|
export const SPONSORSHIP_PRICING_REPOSITORY_TOKEN = 'ISponsorshipPricingRepository';
|
|
export const SPONSORSHIP_REQUEST_REPOSITORY_TOKEN = 'ISponsorshipRequestRepository';
|
|
export const LOGGER_TOKEN = 'Logger';
|
|
|
|
// Use case tokens
|
|
export const GET_SPONSORSHIP_PRICING_USE_CASE_TOKEN = 'GetSponsorshipPricingUseCase';
|
|
export const GET_SPONSORS_USE_CASE_TOKEN = 'GetSponsorsUseCase';
|
|
export const CREATE_SPONSOR_USE_CASE_TOKEN = 'CreateSponsorUseCase';
|
|
export const GET_SPONSOR_DASHBOARD_USE_CASE_TOKEN = 'GetSponsorDashboardUseCase';
|
|
export const GET_SPONSOR_SPONSORSHIPS_USE_CASE_TOKEN = 'GetSponsorSponsorshipsUseCase';
|
|
export const GET_ENTITY_SPONSORSHIP_PRICING_USE_CASE_TOKEN = 'GetEntitySponsorshipPricingUseCase';
|
|
|
|
export const SponsorProviders: Provider[] = [
|
|
SponsorService,
|
|
// Repositories
|
|
{
|
|
provide: SPONSOR_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemorySponsorRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: SEASON_SPONSORSHIP_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemorySeasonSponsorshipRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: SEASON_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemorySeasonRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: LEAGUE_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemoryLeagueRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: LEAGUE_MEMBERSHIP_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemoryLeagueMembershipRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: RACE_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemoryRaceRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: SPONSORSHIP_PRICING_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemorySponsorshipPricingRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: SPONSORSHIP_REQUEST_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger) => new InMemorySponsorshipRequestRepository(logger),
|
|
inject: [LOGGER_TOKEN],
|
|
},
|
|
{
|
|
provide: LOGGER_TOKEN,
|
|
useClass: ConsoleLogger,
|
|
},
|
|
// Use cases
|
|
{
|
|
provide: GET_SPONSORSHIP_PRICING_USE_CASE_TOKEN,
|
|
useFactory: () => new GetSponsorshipPricingUseCase(),
|
|
inject: [],
|
|
},
|
|
{
|
|
provide: GET_SPONSORS_USE_CASE_TOKEN,
|
|
useFactory: (sponsorRepo: ISponsorRepository) => new GetSponsorsUseCase(sponsorRepo),
|
|
inject: [SPONSOR_REPOSITORY_TOKEN],
|
|
},
|
|
{
|
|
provide: CREATE_SPONSOR_USE_CASE_TOKEN,
|
|
useFactory: (sponsorRepo: ISponsorRepository) => new CreateSponsorUseCase(sponsorRepo),
|
|
inject: [SPONSOR_REPOSITORY_TOKEN],
|
|
},
|
|
{
|
|
provide: GET_SPONSOR_DASHBOARD_USE_CASE_TOKEN,
|
|
useFactory: (sponsorRepo: ISponsorRepository, seasonSponsorshipRepo: ISeasonSponsorshipRepository, seasonRepo: ISeasonRepository, leagueRepo: ILeagueRepository, leagueMembershipRepo: ILeagueMembershipRepository, raceRepo: IRaceRepository) =>
|
|
new GetSponsorDashboardUseCase(sponsorRepo, seasonSponsorshipRepo, seasonRepo, leagueRepo, leagueMembershipRepo, raceRepo),
|
|
inject: [SPONSOR_REPOSITORY_TOKEN, SEASON_SPONSORSHIP_REPOSITORY_TOKEN, SEASON_REPOSITORY_TOKEN, LEAGUE_REPOSITORY_TOKEN, LEAGUE_MEMBERSHIP_REPOSITORY_TOKEN, RACE_REPOSITORY_TOKEN],
|
|
},
|
|
{
|
|
provide: GET_SPONSOR_SPONSORSHIPS_USE_CASE_TOKEN,
|
|
useFactory: (sponsorRepo: ISponsorRepository, seasonSponsorshipRepo: ISeasonSponsorshipRepository, seasonRepo: ISeasonRepository, raceRepo: IRaceRepository) =>
|
|
new GetSponsorSponsorshipsUseCase(sponsorRepo, seasonSponsorshipRepo, seasonRepo, raceRepo),
|
|
inject: [SPONSOR_REPOSITORY_TOKEN, SEASON_SPONSORSHIP_REPOSITORY_TOKEN, SEASON_REPOSITORY_TOKEN, RACE_REPOSITORY_TOKEN],
|
|
},
|
|
{
|
|
provide: GET_ENTITY_SPONSORSHIP_PRICING_USE_CASE_TOKEN,
|
|
useFactory: (sponsorshipPricingRepo: ISponsorshipPricingRepository, sponsorshipRequestRepo: ISponsorshipRequestRepository, seasonSponsorshipRepo: ISeasonSponsorshipRepository, logger: Logger) =>
|
|
new GetEntitySponsorshipPricingUseCase(sponsorshipPricingRepo, sponsorshipRequestRepo, seasonSponsorshipRepo, logger),
|
|
inject: [SPONSORSHIP_PRICING_REPOSITORY_TOKEN, SPONSORSHIP_REQUEST_REPOSITORY_TOKEN, SEASON_SPONSORSHIP_REPOSITORY_TOKEN, LOGGER_TOKEN],
|
|
},
|
|
];
|