67 lines
3.2 KiB
TypeScript
67 lines
3.2 KiB
TypeScript
import { LeaguesApiClient } from './leagues/LeaguesApiClient';
|
|
import { RacesApiClient } from './races/RacesApiClient';
|
|
import { DriversApiClient } from './drivers/DriversApiClient';
|
|
import { TeamsApiClient } from './teams/TeamsApiClient';
|
|
import { SponsorsApiClient } from './sponsors/SponsorsApiClient';
|
|
import { MediaApiClient } from './media/MediaApiClient';
|
|
import { AnalyticsApiClient } from './analytics/AnalyticsApiClient';
|
|
import { AuthApiClient } from './auth/AuthApiClient';
|
|
import { PaymentsApiClient } from './payments/PaymentsApiClient';
|
|
import { DashboardApiClient } from './dashboard/DashboardApiClient';
|
|
import { PenaltiesApiClient } from './penalties/PenaltiesApiClient';
|
|
import { ProtestsApiClient } from './protests/ProtestsApiClient';
|
|
import { AdminApiClient } from './admin/AdminApiClient';
|
|
import { ConsoleLogger } from '@/lib/infrastructure/logging/ConsoleLogger';
|
|
import { EnhancedErrorReporter } from '@/lib/infrastructure/EnhancedErrorReporter';
|
|
|
|
/**
|
|
* Main API Client
|
|
*
|
|
* Orchestrates all domain-specific API clients with consistent configuration.
|
|
*/
|
|
export class ApiClient {
|
|
public readonly leagues: LeaguesApiClient;
|
|
public readonly races: RacesApiClient;
|
|
public readonly drivers: DriversApiClient;
|
|
public readonly teams: TeamsApiClient;
|
|
public readonly sponsors: SponsorsApiClient;
|
|
public readonly media: MediaApiClient;
|
|
public readonly analytics: AnalyticsApiClient;
|
|
public readonly auth: AuthApiClient;
|
|
public readonly payments: PaymentsApiClient;
|
|
public readonly dashboard: DashboardApiClient;
|
|
public readonly penalties: PenaltiesApiClient;
|
|
public readonly protests: ProtestsApiClient;
|
|
public readonly admin: AdminApiClient;
|
|
|
|
constructor(baseUrl: string) {
|
|
const logger = new ConsoleLogger();
|
|
const errorReporter = new EnhancedErrorReporter(logger, {
|
|
showUserNotifications: true,
|
|
logToConsole: true,
|
|
reportToExternal: process.env.NODE_ENV === 'production',
|
|
});
|
|
|
|
this.leagues = new LeaguesApiClient(baseUrl, errorReporter, logger);
|
|
this.races = new RacesApiClient(baseUrl, errorReporter, logger);
|
|
this.drivers = new DriversApiClient(baseUrl, errorReporter, logger);
|
|
this.teams = new TeamsApiClient(baseUrl, errorReporter, logger);
|
|
this.sponsors = new SponsorsApiClient(baseUrl, errorReporter, logger);
|
|
this.media = new MediaApiClient(baseUrl, errorReporter, logger);
|
|
this.analytics = new AnalyticsApiClient(baseUrl, errorReporter, logger);
|
|
this.auth = new AuthApiClient(baseUrl, errorReporter, logger);
|
|
this.payments = new PaymentsApiClient(baseUrl, errorReporter, logger);
|
|
this.dashboard = new DashboardApiClient(baseUrl, errorReporter, logger);
|
|
this.penalties = new PenaltiesApiClient(baseUrl, errorReporter, logger);
|
|
this.protests = new ProtestsApiClient(baseUrl, errorReporter, logger);
|
|
this.admin = new AdminApiClient(baseUrl, errorReporter, logger);
|
|
}
|
|
}
|
|
|
|
// ============================================================================
|
|
// Singleton Instance
|
|
// ============================================================================
|
|
|
|
const API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001';
|
|
|
|
export const api = new ApiClient(API_BASE_URL); |