view data fixes
This commit is contained in:
@@ -1,14 +1,22 @@
|
||||
/**
|
||||
* Race Results View Data Builder
|
||||
*
|
||||
* Transforms API DTO to ViewData for templates.
|
||||
*/
|
||||
|
||||
import type { RaceResultsDetailDTO } from '@/lib/types/generated/RaceResultsDetailDTO';
|
||||
import type { RaceResultsPenalty, RaceResultsResult, RaceResultsViewData } from '@/lib/view-data/RaceResultsViewData';
|
||||
|
||||
import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder";
|
||||
|
||||
export class RaceResultsViewDataBuilder implements ViewDataBuilder<any, any> {
|
||||
build(input: any): any {
|
||||
return RaceResultsViewDataBuilder.build(input);
|
||||
}
|
||||
|
||||
static build(apiDto: RaceResultsDetailDTO): RaceResultsViewData {
|
||||
export class RaceResultsViewDataBuilder {
|
||||
/**
|
||||
* Transform API DTO to ViewData
|
||||
*
|
||||
* @param apiDto - The DTO from the service
|
||||
* @returns ViewData for the race results page
|
||||
*/
|
||||
public static build(apiDto: RaceResultsDetailDTO): RaceResultsViewData {
|
||||
if (!apiDto) {
|
||||
return {
|
||||
raceSOF: null,
|
||||
@@ -19,15 +27,12 @@ export class RaceResultsViewDataBuilder implements ViewDataBuilder<any, any> {
|
||||
};
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const dto = apiDto as any;
|
||||
|
||||
// Transform results
|
||||
const results: RaceResultsResult[] = (dto.results || []).map((result: any) => ({
|
||||
const results: RaceResultsResult[] = (apiDto.results || []).map((result: any) => ({
|
||||
position: result.position,
|
||||
driverId: result.driverId,
|
||||
driverName: result.driverName,
|
||||
driverAvatar: result.avatarUrl,
|
||||
driverAvatar: result.avatarUrl || '',
|
||||
country: result.country || 'US',
|
||||
car: result.car || 'Unknown',
|
||||
laps: result.laps || 0,
|
||||
@@ -39,7 +44,7 @@ export class RaceResultsViewDataBuilder implements ViewDataBuilder<any, any> {
|
||||
}));
|
||||
|
||||
// Transform penalties
|
||||
const penalties: RaceResultsPenalty[] = (dto.penalties || []).map((penalty: any) => ({
|
||||
const penalties: RaceResultsPenalty[] = ((apiDto as any).penalties || []).map((penalty: any) => ({
|
||||
driverId: penalty.driverId,
|
||||
driverName: penalty.driverName || 'Unknown',
|
||||
type: penalty.type as 'time_penalty' | 'grid_penalty' | 'points_deduction' | 'disqualification' | 'warning' | 'license_points',
|
||||
@@ -49,15 +54,17 @@ export class RaceResultsViewDataBuilder implements ViewDataBuilder<any, any> {
|
||||
}));
|
||||
|
||||
return {
|
||||
raceTrack: dto.race?.track,
|
||||
raceScheduledAt: dto.race?.scheduledAt,
|
||||
totalDrivers: dto.stats?.totalDrivers,
|
||||
leagueName: dto.league?.name,
|
||||
raceSOF: dto.strengthOfField || null,
|
||||
raceTrack: apiDto.track || (apiDto as any).race?.track,
|
||||
raceScheduledAt: (apiDto as any).race?.scheduledAt,
|
||||
totalDrivers: (apiDto as any).stats?.totalDrivers,
|
||||
leagueName: (apiDto as any).league?.name,
|
||||
raceSOF: (apiDto as any).strengthOfField || null,
|
||||
results,
|
||||
penalties,
|
||||
pointsSystem: dto.pointsSystem || {},
|
||||
fastestLapTime: dto.fastestLapTime || 0,
|
||||
pointsSystem: (apiDto as any).pointsSystem || {},
|
||||
fastestLapTime: (apiDto as any).fastestLapTime || 0,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RaceResultsViewDataBuilder satisfies ViewDataBuilder<RaceResultsDetailDTO, RaceResultsViewData>;
|
||||
|
||||
Reference in New Issue
Block a user