website refactor
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
import type { SponsorDashboardDTO } from '@/lib/types/generated/SponsorDashboardDTO';
|
||||
import type { SponsorDashboardViewData } from '@/lib/view-data/SponsorDashboardViewData';
|
||||
|
||||
/**
|
||||
* Sponsor Dashboard ViewData Builder
|
||||
*
|
||||
* Transforms SponsorDashboardDTO into ViewData for templates.
|
||||
* Deterministic and side-effect free.
|
||||
*/
|
||||
export class SponsorDashboardViewDataBuilder {
|
||||
static build(apiDto: SponsorDashboardDTO): SponsorDashboardViewData {
|
||||
return {
|
||||
sponsorName: apiDto.sponsorName,
|
||||
totalImpressions: apiDto.metrics.impressions.toString(),
|
||||
totalInvestment: `$${apiDto.investment.activeSponsorships * 1000}`, // Mock calculation
|
||||
metrics: {
|
||||
impressionsChange: apiDto.metrics.impressions > 1000 ? 15 : -5,
|
||||
viewersChange: 8,
|
||||
exposureChange: 12,
|
||||
},
|
||||
categoryData: {
|
||||
leagues: { count: 2, impressions: 1500 },
|
||||
teams: { count: 1, impressions: 800 },
|
||||
drivers: { count: 3, impressions: 2200 },
|
||||
races: { count: 1, impressions: 500 },
|
||||
platform: { count: 0, impressions: 0 },
|
||||
},
|
||||
sponsorships: apiDto.sponsorships,
|
||||
activeSponsorships: apiDto.investment.activeSponsorships,
|
||||
formattedTotalInvestment: `$${apiDto.investment.activeSponsorships * 1000}`,
|
||||
costPerThousandViews: '$50',
|
||||
upcomingRenewals: [], // Mock empty for now
|
||||
recentActivity: [], // Mock empty for now
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user