84 lines
1.7 KiB
TypeScript
84 lines
1.7 KiB
TypeScript
/**
|
|
* Dashboard Page DTO
|
|
* This is the data transfer object that gets passed from server to client
|
|
* Contains ISO string timestamps for JSON serialization
|
|
*/
|
|
export interface DashboardOverviewViewModelData {
|
|
currentDriver?: {
|
|
id: string;
|
|
name: string;
|
|
avatarUrl: string;
|
|
country: string;
|
|
totalRaces: number;
|
|
wins: number;
|
|
podiums: number;
|
|
rating: number;
|
|
globalRank: number;
|
|
consistency: number;
|
|
};
|
|
myUpcomingRaces: Array<{
|
|
id: string;
|
|
track: string;
|
|
car: string;
|
|
scheduledAt: string; // ISO string
|
|
status: string;
|
|
isMyLeague: boolean;
|
|
}>;
|
|
otherUpcomingRaces: Array<{
|
|
id: string;
|
|
track: string;
|
|
car: string;
|
|
scheduledAt: string; // ISO string
|
|
status: string;
|
|
isMyLeague: boolean;
|
|
}>;
|
|
upcomingRaces: Array<{
|
|
id: string;
|
|
track: string;
|
|
car: string;
|
|
scheduledAt: string; // ISO string
|
|
status: string;
|
|
isMyLeague: boolean;
|
|
}>;
|
|
activeLeaguesCount: number;
|
|
nextRace?: {
|
|
id: string;
|
|
track: string;
|
|
car: string;
|
|
scheduledAt: string; // ISO string
|
|
status: string;
|
|
isMyLeague: boolean;
|
|
};
|
|
recentResults: Array<{
|
|
id: string;
|
|
track: string;
|
|
car: string;
|
|
position: number;
|
|
date: string; // ISO string
|
|
}>;
|
|
leagueStandingsSummaries: Array<{
|
|
leagueId: string;
|
|
leagueName: string;
|
|
position: number;
|
|
points: number;
|
|
totalDrivers: number;
|
|
}>;
|
|
feedSummary: {
|
|
notificationCount: number;
|
|
items: Array<{
|
|
id: string;
|
|
type: string;
|
|
headline: string;
|
|
body?: string;
|
|
timestamp: string; // ISO string
|
|
ctaHref?: string;
|
|
ctaLabel?: string;
|
|
}>;
|
|
};
|
|
friends: Array<{
|
|
id: string;
|
|
name: string;
|
|
avatarUrl: string;
|
|
country: string;
|
|
}>;
|
|
} |