website refactor
This commit is contained in:
83
apps/website/lib/view-data/LeagueDetailViewData.ts
Normal file
83
apps/website/lib/view-data/LeagueDetailViewData.ts
Normal file
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* LeagueDetailViewData - Pure ViewData for LeagueDetailTemplate
|
||||
* Contains only raw serializable data, no methods or computed properties
|
||||
*/
|
||||
|
||||
export interface LeagueInfoData {
|
||||
name: string;
|
||||
description?: string;
|
||||
membersCount: number;
|
||||
racesCount: number;
|
||||
avgSOF: number | null;
|
||||
structure: string;
|
||||
scoring: string;
|
||||
createdAt: string;
|
||||
discordUrl?: string;
|
||||
youtubeUrl?: string;
|
||||
websiteUrl?: string;
|
||||
}
|
||||
|
||||
export interface SponsorInfo {
|
||||
id: string;
|
||||
name: string;
|
||||
tier: 'main' | 'secondary';
|
||||
logoUrl?: string;
|
||||
websiteUrl?: string;
|
||||
tagline?: string;
|
||||
}
|
||||
|
||||
export interface LiveRaceData {
|
||||
id: string;
|
||||
name: string;
|
||||
date: string;
|
||||
registeredCount?: number;
|
||||
strengthOfField?: number;
|
||||
}
|
||||
|
||||
export interface DriverSummaryData {
|
||||
driverId: string;
|
||||
driverName: string;
|
||||
avatarUrl: string | null;
|
||||
rating: number | null;
|
||||
rank: number | null;
|
||||
roleBadgeText: string;
|
||||
roleBadgeClasses: string;
|
||||
profileUrl: string;
|
||||
}
|
||||
|
||||
export interface LeagueDetailViewData {
|
||||
// Basic info
|
||||
leagueId: string;
|
||||
name: string;
|
||||
description: string;
|
||||
|
||||
// Info card data
|
||||
info: LeagueInfoData;
|
||||
|
||||
// Live races
|
||||
runningRaces: LiveRaceData[];
|
||||
|
||||
// Sponsors
|
||||
sponsors: SponsorInfo[];
|
||||
|
||||
// Management
|
||||
ownerSummary: DriverSummaryData | null;
|
||||
adminSummaries: DriverSummaryData[];
|
||||
stewardSummaries: DriverSummaryData[];
|
||||
|
||||
// Sponsor insights (for sponsor mode)
|
||||
sponsorInsights: {
|
||||
avgViewsPerRace: number;
|
||||
engagementRate: string;
|
||||
estimatedReach: number;
|
||||
tier: 'premium' | 'standard' | 'starter';
|
||||
trustScore: number;
|
||||
discordMembers: number;
|
||||
monthlyActivity: number;
|
||||
mainSponsorAvailable: boolean;
|
||||
secondarySlotsAvailable: number;
|
||||
mainSponsorPrice: number;
|
||||
secondaryPrice: number;
|
||||
totalImpressions: number;
|
||||
} | null;
|
||||
}
|
||||
Reference in New Issue
Block a user