38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import type { Standing } from '@gridpilot/racing/domain/entities/Standing';
|
|
import type {
|
|
ILeagueStandingsPresenter,
|
|
StandingItemViewModel,
|
|
LeagueStandingsViewModel,
|
|
} from '@gridpilot/racing/application/presenters/ILeagueStandingsPresenter';
|
|
|
|
export class LeagueStandingsPresenter implements ILeagueStandingsPresenter {
|
|
private viewModel: LeagueStandingsViewModel | null = null;
|
|
|
|
present(standings: Standing[]): LeagueStandingsViewModel {
|
|
const standingItems: StandingItemViewModel[] = standings.map((standing) => ({
|
|
id: standing.id,
|
|
leagueId: standing.leagueId,
|
|
seasonId: standing.seasonId,
|
|
driverId: standing.driverId,
|
|
position: standing.position,
|
|
points: standing.points,
|
|
wins: standing.wins,
|
|
podiums: standing.podiums,
|
|
racesCompleted: standing.racesCompleted,
|
|
}));
|
|
|
|
this.viewModel = {
|
|
leagueId: standings[0]?.leagueId ?? '',
|
|
standings: standingItems,
|
|
};
|
|
|
|
return this.viewModel;
|
|
}
|
|
|
|
getViewModel(): LeagueStandingsViewModel {
|
|
if (!this.viewModel) {
|
|
throw new Error('Presenter has not been called yet');
|
|
}
|
|
return this.viewModel;
|
|
}
|
|
} |