46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
/**
|
|
* 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;
|
|
country?: string;
|
|
bio?: string;
|
|
joinedAt?: string;
|
|
|
|
constructor(dto: {
|
|
id: string;
|
|
name: string;
|
|
avatarUrl?: string;
|
|
iracingId?: string;
|
|
rating?: number;
|
|
country?: string;
|
|
bio?: string;
|
|
joinedAt?: string;
|
|
}) {
|
|
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;
|
|
if (dto.country !== undefined) this.country = dto.country;
|
|
if (dto.bio !== undefined) this.bio = dto.bio;
|
|
if (dto.joinedAt !== undefined) this.joinedAt = dto.joinedAt;
|
|
}
|
|
|
|
/** 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';
|
|
}
|
|
} |