api client refactor
This commit is contained in:
28
apps/website/lib/view-models/DriverLeaderboardViewModel.ts
Normal file
28
apps/website/lib/view-models/DriverLeaderboardViewModel.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { DriversLeaderboardDto, DriverLeaderboardItemDto } from '../dtos';
|
||||
import { DriverLeaderboardItemViewModel } from './DriverLeaderboardItemViewModel';
|
||||
|
||||
export class DriverLeaderboardViewModel implements DriversLeaderboardDto {
|
||||
drivers: DriverLeaderboardItemViewModel[];
|
||||
|
||||
constructor(dto: DriversLeaderboardDto & { drivers: DriverLeaderboardItemDto[] }, previousDrivers?: DriverLeaderboardItemDto[]) {
|
||||
this.drivers = dto.drivers.map((driver, index) => {
|
||||
const previous = previousDrivers?.find(p => p.id === driver.id);
|
||||
return new DriverLeaderboardItemViewModel(driver, index + 1, previous?.rating);
|
||||
});
|
||||
}
|
||||
|
||||
/** UI-specific: Total races across all drivers */
|
||||
get totalRaces(): number {
|
||||
return this.drivers.reduce((sum, driver) => sum + driver.races, 0);
|
||||
}
|
||||
|
||||
/** UI-specific: Total wins across all drivers */
|
||||
get totalWins(): number {
|
||||
return this.drivers.reduce((sum, driver) => sum + driver.wins, 0);
|
||||
}
|
||||
|
||||
/** UI-specific: Active drivers count */
|
||||
get activeCount(): number {
|
||||
return this.drivers.filter(driver => driver.isActive).length;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user