Files
gridpilot.gg/apps/website/lib/view-data/LeagueDetailViewData.ts
2026-01-24 00:52:27 +01:00

87 lines
1.8 KiB
TypeScript

import { ViewData } from '@/lib/contracts/view-data/ViewData';
export interface LiveRaceData {
id: string;
name: string;
date: string;
registeredCount: number;
strengthOfField: number;
}
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 DriverSummaryData {
driverId: string;
driverName: string;
avatarUrl: string | null;
rating: number | null;
rank: number | null;
roleBadgeText: string;
roleBadgeClasses: string;
profileUrl: string;
}
export interface SponsorInfo {
id: string;
name: string;
tier: string;
logoUrl?: string;
websiteUrl?: string;
tagline?: string;
}
export interface NextRaceInfo {
id: string;
name: string;
date: string;
track: string;
car: string;
}
export interface SeasonProgress {
completedRaces: number;
totalRaces: number;
percentage: number;
}
export interface RecentResult {
raceId: string;
raceName: string;
position: number;
points: number;
finishedAt: string;
}
export interface LeagueDetailViewData extends ViewData {
leagueId: string;
name: string;
description: string;
logoUrl?: string;
info: LeagueInfoData;
runningRaces: LiveRaceData[];
sponsors: SponsorInfo[];
ownerSummary: DriverSummaryData | null;
adminSummaries: DriverSummaryData[];
stewardSummaries: DriverSummaryData[];
memberSummaries: DriverSummaryData[];
sponsorInsights: any | null;
nextRace?: NextRaceInfo;
seasonProgress: SeasonProgress;
recentResults: RecentResult[];
walletBalance: number;
pendingProtestsCount: number;
pendingJoinRequestsCount: number;
}