Files
gridpilot.gg/apps/api/src/domain/driver/presenters/DriversLeaderboardPresenter.ts
2025-12-30 18:33:15 +01:00

35 lines
1.2 KiB
TypeScript

import { DriversLeaderboardDTO } from '../dtos/DriversLeaderboardDTO';
import type {
GetDriversLeaderboardResult,
} from '@core/racing/application/use-cases/GetDriversLeaderboardUseCase';
export class DriversLeaderboardPresenter {
private responseModel: DriversLeaderboardDTO | null = null;
present(data: GetDriversLeaderboardResult): void {
this.responseModel = {
drivers: data.items.map(item => ({
id: item.driver.id,
name: item.driver.name.toString(),
rating: item.rating,
skillLevel: item.skillLevel,
...(item.driver.category !== undefined ? { category: item.driver.category } : {}),
nationality: item.driver.country.toString(),
racesCompleted: item.racesCompleted,
wins: item.wins,
podiums: item.podiums,
isActive: item.isActive,
rank: item.rank,
...(item.avatarUrl !== undefined ? { avatarUrl: item.avatarUrl } : {}),
})),
totalRaces: data.totalRaces,
totalWins: data.totalWins,
activeCount: data.activeCount,
};
}
getResponseModel(): DriversLeaderboardDTO {
if (!this.responseModel) throw new Error('Presenter not presented');
return this.responseModel;
}
}