Files
gridpilot.gg/apps/website/lib/services/ServiceFactory.ts
2025-12-18 01:20:23 +01:00

199 lines
5.7 KiB
TypeScript

import { RacesApiClient } from '../api/races/RacesApiClient';
import { DriversApiClient } from '../api/drivers/DriversApiClient';
import { TeamsApiClient } from '../api/teams/TeamsApiClient';
import { LeaguesApiClient } from '../api/leagues/LeaguesApiClient';
import { SponsorsApiClient } from '../api/sponsors/SponsorsApiClient';
import { PaymentsApiClient } from '../api/payments/PaymentsApiClient';
import { AuthApiClient } from '../api/auth/AuthApiClient';
import { AnalyticsApiClient } from '../api/analytics/AnalyticsApiClient';
import { MediaApiClient } from '../api/media/MediaApiClient';
// Services
import { RaceService } from './races/RaceService';
import { RaceResultsService } from './races/RaceResultsService';
import { DriverService } from './drivers/DriverService';
import { DriverRegistrationService } from './drivers/DriverRegistrationService';
import { TeamService } from './teams/TeamService';
import { TeamJoinService } from './teams/TeamJoinService';
import { LeagueService } from './leagues/LeagueService';
import { LeagueMembershipService } from './leagues/LeagueMembershipService';
import { SponsorService } from './sponsors/SponsorService';
import { SponsorshipService } from './sponsors/SponsorshipService';
import { PaymentService } from './payments/PaymentService';
import { AnalyticsService } from './analytics/AnalyticsService';
import { DashboardService } from './analytics/DashboardService';
import { MediaService } from './media/MediaService';
import { AvatarService } from './media/AvatarService';
import { WalletService } from './payments/WalletService';
import { MembershipFeeService } from './payments/MembershipFeeService';
import { AuthService } from './auth/AuthService';
import { SessionService } from './auth/SessionService';
/**
* ServiceFactory - Composition root for all services
*
* Centralizes service creation and dependency injection wiring.
* Each factory method creates fresh instances with proper dependencies.
* Services now directly instantiate View Models instead of using Presenters.
*/
export class ServiceFactory {
private readonly apiClients: {
races: RacesApiClient;
drivers: DriversApiClient;
teams: TeamsApiClient;
leagues: LeaguesApiClient;
sponsors: SponsorsApiClient;
payments: PaymentsApiClient;
auth: AuthApiClient;
analytics: AnalyticsApiClient;
media: MediaApiClient;
};
constructor(baseUrl: string) {
// Initialize API clients
this.apiClients = {
races: new RacesApiClient(baseUrl),
drivers: new DriversApiClient(baseUrl),
teams: new TeamsApiClient(baseUrl),
leagues: new LeaguesApiClient(baseUrl),
sponsors: new SponsorsApiClient(baseUrl),
payments: new PaymentsApiClient(baseUrl),
auth: new AuthApiClient(baseUrl),
analytics: new AnalyticsApiClient(baseUrl),
media: new MediaApiClient(baseUrl),
};
}
/**
* Create RaceService instance
*/
createRaceService(): RaceService {
return new RaceService(this.apiClients.races);
}
/**
* Create RaceResultsService instance
*/
createRaceResultsService(): RaceResultsService {
return new RaceResultsService(this.apiClients.races);
}
/**
* Create DriverService instance
*/
createDriverService(): DriverService {
return new DriverService(this.apiClients.drivers);
}
/**
* Create DriverRegistrationService instance
*/
createDriverRegistrationService(): DriverRegistrationService {
return new DriverRegistrationService(this.apiClients.drivers);
}
/**
* Create TeamService instance
*/
createTeamService(): TeamService {
return new TeamService(this.apiClients.teams);
}
/**
* Create TeamJoinService instance
*/
createTeamJoinService(): TeamJoinService {
return new TeamJoinService(this.apiClients.teams);
}
/**
* Create LeagueService instance
*/
createLeagueService(): LeagueService {
return new LeagueService(this.apiClients.leagues);
}
/**
* Create LeagueMembershipService instance
*/
createLeagueMembershipService(): LeagueMembershipService {
return new LeagueMembershipService(this.apiClients.leagues);
}
/**
* Create SponsorService instance
*/
createSponsorService(): SponsorService {
return new SponsorService(this.apiClients.sponsors);
}
/**
* Create SponsorshipService instance
*/
createSponsorshipService(): SponsorshipService {
return new SponsorshipService(this.apiClients.sponsors);
}
/**
* Create PaymentService instance
*/
createPaymentService(): PaymentService {
return new PaymentService(this.apiClients.payments);
}
/**
* Create AnalyticsService instance
*/
createAnalyticsService(): AnalyticsService {
return new AnalyticsService(this.apiClients.analytics);
}
/**
* Create DashboardService instance
*/
createDashboardService(): DashboardService {
return new DashboardService(this.apiClients.analytics);
}
/**
* Create MediaService instance
*/
createMediaService(): MediaService {
return new MediaService(this.apiClients.media);
}
/**
* Create AvatarService instance
*/
createAvatarService(): AvatarService {
return new AvatarService(this.apiClients.media);
}
/**
* Create WalletService instance
*/
createWalletService(): WalletService {
return new WalletService(this.apiClients.payments);
}
/**
* Create MembershipFeeService instance
*/
createMembershipFeeService(): MembershipFeeService {
return new MembershipFeeService(this.apiClients.payments);
}
/**
* Create AuthService instance
*/
createAuthService(): AuthService {
return new AuthService(this.apiClients.auth);
}
/**
* Create SessionService instance
*/
createSessionService(): SessionService {
return new SessionService(this.apiClients.auth);
}
}