35 lines
1.2 KiB
TypeScript
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;
|
|
}
|
|
} |