346 lines
12 KiB
TypeScript
346 lines
12 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';
|
|
|
|
// Presenters
|
|
import { RaceDetailPresenter } from '../presenters/RaceDetailPresenter';
|
|
import { RaceResultsDetailPresenter } from '../presenters/RaceResultsDetailPresenter';
|
|
import { RaceWithSOFPresenter } from '../presenters/RaceWithSOFPresenter';
|
|
import { ImportRaceResultsPresenter } from '../presenters/ImportRaceResultsPresenter';
|
|
import { DriversLeaderboardPresenter } from '../presenters/DriversLeaderboardPresenter';
|
|
import { DriverPresenter } from '../presenters/DriverPresenter';
|
|
import { CompleteOnboardingPresenter } from '../presenters/CompleteOnboardingPresenter';
|
|
import { DriverRegistrationStatusPresenter } from '../presenters/DriverRegistrationStatusPresenter';
|
|
import { TeamDetailsPresenter } from '../presenters/TeamDetailsPresenter';
|
|
import { TeamListPresenter } from '../presenters/TeamListPresenter';
|
|
import { TeamMembersPresenter } from '../presenters/TeamMembersPresenter';
|
|
import { TeamJoinRequestPresenter } from '../presenters/TeamJoinRequestPresenter';
|
|
import { LeagueSummaryPresenter } from '../presenters/LeagueSummaryPresenter';
|
|
import { LeagueStandingsPresenter } from '../presenters/LeagueStandingsPresenter';
|
|
import { LeagueMembersPresenter } from '../presenters/LeagueMembersPresenter';
|
|
import { SponsorListPresenter } from '../presenters/SponsorListPresenter';
|
|
import { SponsorDashboardPresenter } from '../presenters/SponsorDashboardPresenter';
|
|
import { SponsorSponsorshipsPresenter } from '../presenters/SponsorSponsorshipsPresenter';
|
|
import { SponsorshipPricingPresenter } from '../presenters/SponsorshipPricingPresenter';
|
|
import { PaymentListPresenter } from '../presenters/PaymentListPresenter';
|
|
import { presentPayment } from '../presenters/PaymentPresenter';
|
|
import { presentMembershipFee } from '../presenters/MembershipFeePresenter';
|
|
import { presentPrize } from '../presenters/PrizePresenter';
|
|
import { presentWallet } from '../presenters/WalletPresenter';
|
|
import { AnalyticsDashboardPresenter } from '../presenters/AnalyticsDashboardPresenter';
|
|
import { AnalyticsMetricsPresenter } from '../presenters/AnalyticsMetricsPresenter';
|
|
import { MediaPresenter } from '../presenters/MediaPresenter';
|
|
import { AvatarPresenter } from '../presenters/AvatarPresenter';
|
|
import { SessionPresenter } from '../presenters/SessionPresenter';
|
|
|
|
/**
|
|
* ServiceFactory - Composition root for all services
|
|
*
|
|
* Centralizes service creation and dependency injection wiring.
|
|
* Each factory method creates fresh instances with proper dependencies.
|
|
*/
|
|
export class ServiceFactory {
|
|
private readonly apiClients: {
|
|
races: RacesApiClient;
|
|
drivers: DriversApiClient;
|
|
teams: TeamsApiClient;
|
|
leagues: LeaguesApiClient;
|
|
sponsors: SponsorsApiClient;
|
|
payments: PaymentsApiClient;
|
|
auth: AuthApiClient;
|
|
analytics: AnalyticsApiClient;
|
|
media: MediaApiClient;
|
|
};
|
|
|
|
private readonly presenters: {
|
|
raceDetail: RaceDetailPresenter;
|
|
raceResultsDetail: RaceResultsDetailPresenter;
|
|
raceWithSOF: RaceWithSOFPresenter;
|
|
importRaceResults: ImportRaceResultsPresenter;
|
|
driversLeaderboard: DriversLeaderboardPresenter;
|
|
driver: DriverPresenter;
|
|
completeOnboarding: CompleteOnboardingPresenter;
|
|
driverRegistrationStatus: DriverRegistrationStatusPresenter;
|
|
teamDetails: TeamDetailsPresenter;
|
|
teamList: TeamListPresenter;
|
|
teamMembers: TeamMembersPresenter;
|
|
teamJoinRequest: TeamJoinRequestPresenter;
|
|
leagueSummary: LeagueSummaryPresenter;
|
|
leagueStandings: LeagueStandingsPresenter;
|
|
leagueMembers: LeagueMembersPresenter;
|
|
sponsorList: SponsorListPresenter;
|
|
sponsorDashboard: SponsorDashboardPresenter;
|
|
sponsorSponsorships: SponsorSponsorshipsPresenter;
|
|
sponsorshipPricing: SponsorshipPricingPresenter;
|
|
paymentList: PaymentListPresenter;
|
|
analyticsDashboard: AnalyticsDashboardPresenter;
|
|
analyticsMetrics: AnalyticsMetricsPresenter;
|
|
media: MediaPresenter;
|
|
avatar: AvatarPresenter;
|
|
session: SessionPresenter;
|
|
};
|
|
|
|
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),
|
|
};
|
|
|
|
// Initialize presenters
|
|
this.presenters = {
|
|
raceDetail: new RaceDetailPresenter(),
|
|
raceResultsDetail: new RaceResultsDetailPresenter(),
|
|
raceWithSOF: new RaceWithSOFPresenter(),
|
|
importRaceResults: new ImportRaceResultsPresenter(),
|
|
driversLeaderboard: new DriversLeaderboardPresenter(),
|
|
driver: new DriverPresenter(),
|
|
completeOnboarding: new CompleteOnboardingPresenter(),
|
|
driverRegistrationStatus: new DriverRegistrationStatusPresenter(),
|
|
teamDetails: new TeamDetailsPresenter(),
|
|
teamList: new TeamListPresenter(),
|
|
teamMembers: new TeamMembersPresenter(),
|
|
teamJoinRequest: new TeamJoinRequestPresenter(),
|
|
leagueSummary: new LeagueSummaryPresenter(),
|
|
leagueStandings: new LeagueStandingsPresenter(),
|
|
leagueMembers: new LeagueMembersPresenter(),
|
|
sponsorList: new SponsorListPresenter(),
|
|
sponsorDashboard: new SponsorDashboardPresenter(),
|
|
sponsorSponsorships: new SponsorSponsorshipsPresenter(),
|
|
sponsorshipPricing: new SponsorshipPricingPresenter(),
|
|
paymentList: new PaymentListPresenter(),
|
|
analyticsDashboard: new AnalyticsDashboardPresenter(),
|
|
analyticsMetrics: new AnalyticsMetricsPresenter(),
|
|
media: new MediaPresenter(),
|
|
avatar: new AvatarPresenter(),
|
|
session: new SessionPresenter(),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Create RaceService instance
|
|
*/
|
|
createRaceService(): RaceService {
|
|
return new RaceService(
|
|
this.apiClients.races,
|
|
this.presenters.raceDetail
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create RaceResultsService instance
|
|
*/
|
|
createRaceResultsService(): RaceResultsService {
|
|
return new RaceResultsService(
|
|
this.apiClients.races,
|
|
this.presenters.raceResultsDetail,
|
|
this.presenters.raceWithSOF,
|
|
this.presenters.importRaceResults
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create DriverService instance
|
|
*/
|
|
createDriverService(): DriverService {
|
|
return new DriverService(
|
|
this.apiClients.drivers,
|
|
this.presenters.driversLeaderboard,
|
|
this.presenters.driver,
|
|
this.presenters.completeOnboarding
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create DriverRegistrationService instance
|
|
*/
|
|
createDriverRegistrationService(): DriverRegistrationService {
|
|
return new DriverRegistrationService(
|
|
this.apiClients.drivers,
|
|
this.presenters.driverRegistrationStatus
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create TeamService instance
|
|
*/
|
|
createTeamService(): TeamService {
|
|
return new TeamService(
|
|
this.apiClients.teams,
|
|
this.presenters.teamList,
|
|
this.presenters.teamDetails,
|
|
this.presenters.teamMembers
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create TeamJoinService instance
|
|
*/
|
|
createTeamJoinService(): TeamJoinService {
|
|
return new TeamJoinService(
|
|
this.apiClients.teams,
|
|
this.presenters.teamJoinRequest
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create LeagueService instance
|
|
*/
|
|
createLeagueService(): LeagueService {
|
|
return new LeagueService(
|
|
this.apiClients.leagues,
|
|
this.presenters.leagueSummary,
|
|
this.presenters.leagueStandings
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create LeagueMembershipService instance
|
|
*/
|
|
createLeagueMembershipService(): LeagueMembershipService {
|
|
return new LeagueMembershipService(
|
|
this.apiClients.leagues,
|
|
this.presenters.leagueMembers
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create SponsorService instance
|
|
*/
|
|
createSponsorService(): SponsorService {
|
|
return new SponsorService(
|
|
this.apiClients.sponsors,
|
|
this.presenters.sponsorList,
|
|
this.presenters.sponsorDashboard,
|
|
this.presenters.sponsorSponsorships
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create SponsorshipService instance
|
|
*/
|
|
createSponsorshipService(): SponsorshipService {
|
|
return new SponsorshipService(
|
|
this.apiClients.sponsors,
|
|
this.presenters.sponsorshipPricing,
|
|
this.presenters.sponsorSponsorships
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create PaymentService instance
|
|
*/
|
|
createPaymentService(): PaymentService {
|
|
return new PaymentService(
|
|
this.apiClients.payments,
|
|
this.presenters.paymentList,
|
|
presentPayment,
|
|
presentMembershipFee,
|
|
presentPrize,
|
|
presentWallet
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create AnalyticsService instance
|
|
*/
|
|
createAnalyticsService(): AnalyticsService {
|
|
return new AnalyticsService(this.apiClients.analytics);
|
|
}
|
|
|
|
/**
|
|
* Create DashboardService instance
|
|
*/
|
|
createDashboardService(): DashboardService {
|
|
return new DashboardService(
|
|
this.apiClients.analytics,
|
|
this.presenters.analyticsDashboard,
|
|
this.presenters.analyticsMetrics
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create MediaService instance
|
|
*/
|
|
createMediaService(): MediaService {
|
|
return new MediaService(
|
|
this.apiClients.media,
|
|
this.presenters.media
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create AvatarService instance
|
|
*/
|
|
createAvatarService(): AvatarService {
|
|
return new AvatarService(
|
|
this.apiClients.media,
|
|
this.presenters.avatar
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 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,
|
|
this.presenters.session
|
|
);
|
|
}
|
|
} |