Files
gridpilot.gg/apps/website/lib/di/modules/api.module.ts
2026-01-24 12:47:49 +01:00

109 lines
4.1 KiB
TypeScript

import { ContainerModule } from 'inversify';
import { AnalyticsApiClient } from '../../gateways/api/analytics/AnalyticsApiClient';
import { AuthApiClient } from '../../gateways/api/auth/AuthApiClient';
import { DashboardApiClient } from '../../gateways/api/dashboard/DashboardApiClient';
import { DriversApiClient } from '../../gateways/api/drivers/DriversApiClient';
import { LeaguesApiClient } from '../../gateways/api/leagues/LeaguesApiClient';
import { MediaApiClient } from '../../gateways/api/media/MediaApiClient';
import { PaymentsApiClient } from '../../gateways/api/payments/PaymentsApiClient';
import { PenaltiesApiClient } from '../../gateways/api/penalties/PenaltiesApiClient';
import { PolicyApiClient } from '../../gateways/api/policy/PolicyApiClient';
import { ProtestsApiClient } from '../../gateways/api/protests/ProtestsApiClient';
import { RacesApiClient } from '../../gateways/api/races/RacesApiClient';
import { SponsorsApiClient } from '../../gateways/api/sponsors/SponsorsApiClient';
import { TeamsApiClient } from '../../gateways/api/teams/TeamsApiClient';
import { WalletsApiClient } from '../../gateways/api/wallets/WalletsApiClient';
import {
ANALYTICS_API_CLIENT_TOKEN,
AUTH_API_CLIENT_TOKEN,
CONFIG_TOKEN,
DASHBOARD_API_CLIENT_TOKEN,
DRIVER_API_CLIENT_TOKEN,
ERROR_REPORTER_TOKEN,
LEAGUE_API_CLIENT_TOKEN,
LOGGER_TOKEN,
MEDIA_API_CLIENT_TOKEN,
PAYMENT_API_CLIENT_TOKEN,
PENALTY_API_CLIENT_TOKEN,
POLICY_API_CLIENT_TOKEN,
PROTEST_API_CLIENT_TOKEN,
RACE_API_CLIENT_TOKEN,
SPONSOR_API_CLIENT_TOKEN,
TEAM_API_CLIENT_TOKEN,
WALLET_API_CLIENT_TOKEN
} from '../tokens';
export const ApiModule = new ContainerModule((options) => {
const bind = options.bind;
// Factory for creating API clients with shared dependencies
const createApiClient = (
ClientClass: any,
context: any
) => {
const getConfig = context.get(CONFIG_TOKEN);
const baseUrl = getConfig(); // Call function to get fresh config
const errorReporter = context.get(ERROR_REPORTER_TOKEN);
const logger = context.get(LOGGER_TOKEN);
return new ClientClass(baseUrl, errorReporter, logger);
};
// Register all API clients
bind<LeaguesApiClient>(LEAGUE_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(LeaguesApiClient, ctx))
.inSingletonScope();
bind<DriversApiClient>(DRIVER_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(DriversApiClient, ctx))
.inSingletonScope();
bind<TeamsApiClient>(TEAM_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(TeamsApiClient, ctx))
.inSingletonScope();
bind<RacesApiClient>(RACE_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(RacesApiClient, ctx))
.inSingletonScope();
bind<SponsorsApiClient>(SPONSOR_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(SponsorsApiClient, ctx))
.inSingletonScope();
bind<PaymentsApiClient>(PAYMENT_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(PaymentsApiClient, ctx))
.inSingletonScope();
bind<WalletsApiClient>(WALLET_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(WalletsApiClient, ctx))
.inSingletonScope();
bind<AuthApiClient>(AUTH_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(AuthApiClient, ctx))
.inSingletonScope();
bind<AnalyticsApiClient>(ANALYTICS_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(AnalyticsApiClient, ctx))
.inSingletonScope();
bind<MediaApiClient>(MEDIA_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(MediaApiClient, ctx))
.inSingletonScope();
bind<DashboardApiClient>(DASHBOARD_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(DashboardApiClient, ctx))
.inSingletonScope();
bind<PolicyApiClient>(POLICY_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(PolicyApiClient, ctx))
.inSingletonScope();
bind<ProtestsApiClient>(PROTEST_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(ProtestsApiClient, ctx))
.inSingletonScope();
bind<PenaltiesApiClient>(PENALTY_API_CLIENT_TOKEN)
.toDynamicValue(ctx => createApiClient(PenaltiesApiClient, ctx))
.inSingletonScope();
});