import type { SponsorsApiClient } from '../../api/sponsors/SponsorsApiClient'; import type { SponsorshipPricingPresenter } from '../../presenters/SponsorshipPricingPresenter'; import type { SponsorSponsorshipsPresenter } from '../../presenters/SponsorSponsorshipsPresenter'; import type { SponsorshipPricingViewModel, SponsorSponsorshipsViewModel } from '../../view-models'; import type { GetEntitySponsorshipPricingResultDto, SponsorSponsorshipsDto } from '../../dtos'; /** * Sponsorship Service * * Orchestrates sponsorship operations by coordinating API calls and presentation logic. * All dependencies are injected via constructor. */ export class SponsorshipService { constructor( private readonly apiClient: SponsorsApiClient, private readonly sponsorshipPricingPresenter: SponsorshipPricingPresenter, private readonly sponsorSponsorshipsPresenter: SponsorSponsorshipsPresenter ) {} /** * Get sponsorship pricing with presentation transformation */ async getSponsorshipPricing(): Promise { const dto = await this.apiClient.getPricing(); return this.sponsorshipPricingPresenter.present(dto); } /** * Get sponsor sponsorships with presentation transformation */ async getSponsorSponsorships(sponsorId: string): Promise { const dto = await this.apiClient.getSponsorships(sponsorId); if (!dto) { return null; } return this.sponsorSponsorshipsPresenter.present(dto); } }