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; } }