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

45 lines
1.1 KiB
TypeScript

import type { Driver } from '../../domain/entities/Driver';
import type { SkillLevel } from '../../domain/services/SkillLevelService';
import type { Presenter } from '@core/shared/presentation';
export type { SkillLevel };
export interface DriverLeaderboardItemViewModel {
id: string;
name: string;
rating: number;
skillLevel: SkillLevel;
nationality: string;
racesCompleted: number;
wins: number;
podiums: number;
isActive: boolean;
rank: number;
avatarUrl: string;
}
export interface DriversLeaderboardViewModel {
drivers: DriverLeaderboardItemViewModel[];
totalRaces: number;
totalWins: number;
activeCount: number;
}
export interface DriversLeaderboardResultDTO {
drivers: Driver[];
rankings: Array<{ driverId: string; rating: number; overallRank: number | null }>;
stats: Record<
string,
{
rating: number;
wins: number;
podiums: number;
totalRaces: number;
overallRank: number | null;
}
>;
avatarUrls: Record<string, string>;
}
export interface IDriversLeaderboardPresenter
extends Presenter<DriversLeaderboardResultDTO, DriversLeaderboardViewModel> {}