/** * Driver view model * UI representation of a driver * * Note: No matching generated DTO available yet */ export class DriverViewModel { id: string; name: string; avatarUrl?: string; iracingId?: string; rating?: number; constructor(dto: { id: string; name: string; avatarUrl?: string; iracingId?: string; rating?: number; }) { this.id = dto.id; this.name = dto.name; if (dto.avatarUrl !== undefined) this.avatarUrl = dto.avatarUrl; if (dto.iracingId !== undefined) this.iracingId = dto.iracingId; if (dto.rating !== undefined) this.rating = dto.rating; } /** UI-specific: Whether driver has an iRacing ID */ get hasIracingId(): boolean { return !!this.iracingId; } /** UI-specific: Formatted rating */ get formattedRating(): string { return this.rating ? this.rating.toFixed(0) : 'Unrated'; } }