import { ContainerModule } from 'inversify'; import { LeagueService } from '../../services/leagues/LeagueService'; import { LeagueSettingsService } from '../../services/leagues/LeagueSettingsService'; import { LeagueStewardingService } from '../../services/leagues/LeagueStewardingService'; import { LeagueWalletService } from '../../services/leagues/LeagueWalletService'; import { LeagueMembershipService } from '../../services/leagues/LeagueMembershipService'; import { LeaguesApiClient } from '@/lib/api/leagues/LeaguesApiClient'; import { DriversApiClient } from '@/lib/api/drivers/DriversApiClient'; import { SponsorsApiClient } from '@/lib/api/sponsors/SponsorsApiClient'; import { RacesApiClient } from '@/lib/api/races/RacesApiClient'; import { WalletsApiClient } from '@/lib/api/wallets/WalletsApiClient'; import { RaceService } from '@/lib/services/races/RaceService'; import { ProtestService } from '@/lib/services/protests/ProtestService'; import { PenaltyService } from '@/lib/services/penalties/PenaltyService'; import { DriverService } from '@/lib/services/drivers/DriverService'; import { LEAGUE_SERVICE_TOKEN, LEAGUE_SETTINGS_SERVICE_TOKEN, LEAGUE_STEWARDING_SERVICE_TOKEN, LEAGUE_WALLET_SERVICE_TOKEN, LEAGUE_MEMBERSHIP_SERVICE_TOKEN, LEAGUE_API_CLIENT_TOKEN, DRIVER_API_CLIENT_TOKEN, SPONSOR_API_CLIENT_TOKEN, RACE_API_CLIENT_TOKEN, WALLET_API_CLIENT_TOKEN, RACE_SERVICE_TOKEN, PROTEST_SERVICE_TOKEN, PENALTY_SERVICE_TOKEN, DRIVER_SERVICE_TOKEN } from '../tokens'; export const LeagueModule = new ContainerModule((options) => { const bind = options.bind; // League Service bind(LEAGUE_SERVICE_TOKEN) .toDynamicValue((ctx) => { const leagueApiClient = ctx.get(LEAGUE_API_CLIENT_TOKEN); const driverApiClient = ctx.get(DRIVER_API_CLIENT_TOKEN); const sponsorApiClient = ctx.get(SPONSOR_API_CLIENT_TOKEN); const raceApiClient = ctx.get(RACE_API_CLIENT_TOKEN); return new LeagueService( leagueApiClient, driverApiClient, sponsorApiClient, raceApiClient ); }) .inSingletonScope(); // League Settings Service bind(LEAGUE_SETTINGS_SERVICE_TOKEN) .toDynamicValue((ctx) => { const leagueApiClient = ctx.get(LEAGUE_API_CLIENT_TOKEN); const driverApiClient = ctx.get(DRIVER_API_CLIENT_TOKEN); return new LeagueSettingsService(leagueApiClient, driverApiClient); }) .inSingletonScope(); // League Stewarding Service bind(LEAGUE_STEWARDING_SERVICE_TOKEN) .toDynamicValue((ctx) => { const raceService = ctx.get(RACE_SERVICE_TOKEN); const protestService = ctx.get(PROTEST_SERVICE_TOKEN); const penaltyService = ctx.get(PENALTY_SERVICE_TOKEN); const driverService = ctx.get(DRIVER_SERVICE_TOKEN); const membershipService = ctx.get(LEAGUE_MEMBERSHIP_SERVICE_TOKEN); return new LeagueStewardingService( raceService, protestService, penaltyService, driverService, membershipService ); }) .inSingletonScope(); // League Wallet Service bind(LEAGUE_WALLET_SERVICE_TOKEN) .toDynamicValue((ctx) => { const walletApiClient = ctx.get(WALLET_API_CLIENT_TOKEN); return new LeagueWalletService(walletApiClient); }) .inSingletonScope(); // League Membership Service bind(LEAGUE_MEMBERSHIP_SERVICE_TOKEN) .toDynamicValue((ctx) => { const leagueApiClient = ctx.get(LEAGUE_API_CLIENT_TOKEN); return new LeagueMembershipService(leagueApiClient); }) .inSingletonScope(); });