import { RaceDTO } from '../types/generated/RaceDTO'; import { RacesPageDataRaceDTO } from '../types/generated/RacesPageDataRaceDTO'; export class RaceViewModel { constructor( private readonly dto: RaceDTO | RacesPageDataRaceDTO, private readonly _status?: string, private readonly _registeredCount?: number, private readonly _strengthOfField?: number ) {} get id(): string { return this.dto.id; } get name(): string { if ('name' in this.dto) { return this.dto.name; } return ''; } get date(): string { if ('date' in this.dto) { return this.dto.date; } if ('scheduledAt' in this.dto) { return this.dto.scheduledAt; } return ''; } get track(): string { return (this.dto as any).track || ''; } get car(): string { return (this.dto as any).car || ''; } get status(): string | undefined { return this._status || (this.dto as any).status; } get registeredCount(): number | undefined { return this._registeredCount; } get strengthOfField(): number | undefined { return this._strengthOfField || (this.dto as any).strengthOfField; } /** UI-specific: Formatted date */ get formattedDate(): string { return new Date(this.date).toLocaleDateString(); } }