import { RaceDTO } from '@/lib/types/generated/RaceDTO'; import { RacesPageDataRaceDTO } from '@/lib/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 scheduledAt(): string { return this.date; } get track(): string { return 'track' in this.dto ? this.dto.track || '' : ''; } get car(): string { return 'car' in this.dto ? this.dto.car || '' : ''; } get status(): string | undefined { return this._status || ('status' in this.dto ? this.dto.status : undefined); } get registeredCount(): number | undefined { return this._registeredCount; } get strengthOfField(): number | undefined { return this._strengthOfField || ('strengthOfField' in this.dto ? this.dto.strengthOfField : undefined); } /** UI-specific: Formatted date */ get formattedDate(): string { return new Date(this.date).toLocaleDateString(); } }