Files
gridpilot.gg/core/racing/application/presenters/IRaceDetailPresenter.ts
2025-12-16 11:52:26 +01:00

60 lines
1.4 KiB
TypeScript

import type { SessionType, RaceStatus } from '../../domain/entities/Race';
import type { Presenter } from '@core/shared/presentation';
export interface RaceDetailEntryViewModel {
id: string;
name: string;
country: string;
avatarUrl: string;
rating: number | null;
isCurrentUser: boolean;
}
export interface RaceDetailUserResultViewModel {
position: number;
startPosition: number;
incidents: number;
fastestLap: number;
positionChange: number;
isPodium: boolean;
isClean: boolean;
ratingChange: number | null;
}
export interface RaceDetailRaceViewModel {
id: string;
leagueId: string;
track: string;
car: string;
scheduledAt: string;
sessionType: SessionType;
status: RaceStatus;
strengthOfField: number | null;
registeredCount?: number;
maxParticipants?: number;
}
export interface RaceDetailLeagueViewModel {
id: string;
name: string;
description: string;
settings: {
maxDrivers?: number;
qualifyingFormat?: string;
};
}
export interface RaceDetailViewModel {
race: RaceDetailRaceViewModel | null;
league: RaceDetailLeagueViewModel | null;
entryList: RaceDetailEntryViewModel[];
registration: {
isUserRegistered: boolean;
canRegister: boolean;
};
userResult: RaceDetailUserResultViewModel | null;
error?: string;
}
export interface IRaceDetailPresenter
extends Presenter<RaceDetailViewModel, RaceDetailViewModel> {}