61 lines
1.2 KiB
TypeScript
61 lines
1.2 KiB
TypeScript
/**
|
|
* Race Detail View Data
|
|
*
|
|
* ViewData for the race detail page template.
|
|
* JSON-serializable, template-ready data structure.
|
|
*/
|
|
|
|
import { ViewData } from "../contracts/view-data/ViewData";
|
|
|
|
export interface RaceDetailEntry {
|
|
id: string;
|
|
name: string;
|
|
avatarUrl: string;
|
|
country: string;
|
|
rating?: number;
|
|
isCurrentUser: boolean;
|
|
}
|
|
|
|
export interface RaceDetailUserResult {
|
|
position: number;
|
|
startPosition: number;
|
|
positionChange: number;
|
|
incidents: number;
|
|
isClean: boolean;
|
|
isPodium: boolean;
|
|
ratingChange?: number;
|
|
}
|
|
|
|
export interface RaceDetailLeague {
|
|
id: string;
|
|
name: string;
|
|
description?: string;
|
|
settings: {
|
|
maxDrivers: number;
|
|
qualifyingFormat: string;
|
|
};
|
|
}
|
|
|
|
export interface RaceDetailRace {
|
|
id: string;
|
|
track: string;
|
|
car: string;
|
|
scheduledAt: string;
|
|
status: 'scheduled' | 'running' | 'completed' | 'cancelled';
|
|
sessionType: string;
|
|
}
|
|
|
|
export interface RaceDetailRegistration {
|
|
isUserRegistered: boolean;
|
|
canRegister: boolean;
|
|
}
|
|
|
|
|
|
export interface RaceDetailViewData extends ViewData {
|
|
race: RaceDetailRace;
|
|
league?: RaceDetailLeague;
|
|
entryList: RaceDetailEntry[];
|
|
registration: RaceDetailRegistration;
|
|
userResult?: RaceDetailUserResult;
|
|
canReopenRace: boolean;
|
|
} |