website refactor
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import { RaceResultsViewData, RaceResultsResult, RaceResultsPenalty } from '@/lib/view-data/races/RaceResultsViewData';
|
||||
|
||||
/**
|
||||
* Race Results View Data Builder
|
||||
*
|
||||
* Transforms API DTO into ViewData for the race results template.
|
||||
* Deterministic, side-effect free.
|
||||
*/
|
||||
export class RaceResultsViewDataBuilder {
|
||||
static build(apiDto: any): RaceResultsViewData {
|
||||
if (!apiDto) {
|
||||
return {
|
||||
raceSOF: null,
|
||||
results: [],
|
||||
penalties: [],
|
||||
pointsSystem: {},
|
||||
fastestLapTime: 0,
|
||||
};
|
||||
}
|
||||
|
||||
// Transform results
|
||||
const results: RaceResultsResult[] = (apiDto.results || []).map((result: any) => ({
|
||||
position: result.position,
|
||||
driverId: result.driverId,
|
||||
driverName: result.driverName,
|
||||
driverAvatar: result.avatarUrl,
|
||||
country: result.country || 'US',
|
||||
car: result.car || 'Unknown',
|
||||
laps: result.laps || 0,
|
||||
time: result.time || '0:00.00',
|
||||
fastestLap: result.fastestLap?.toString() || '0.00',
|
||||
points: result.points || 0,
|
||||
incidents: result.incidents || 0,
|
||||
isCurrentUser: result.isCurrentUser || false,
|
||||
}));
|
||||
|
||||
// Transform penalties
|
||||
const penalties: RaceResultsPenalty[] = (apiDto.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',
|
||||
value: penalty.value || 0,
|
||||
reason: penalty.reason || 'Penalty applied',
|
||||
notes: penalty.notes,
|
||||
}));
|
||||
|
||||
return {
|
||||
raceTrack: apiDto.race?.track,
|
||||
raceScheduledAt: apiDto.race?.scheduledAt,
|
||||
totalDrivers: apiDto.stats?.totalDrivers,
|
||||
leagueName: apiDto.league?.name,
|
||||
raceSOF: apiDto.strengthOfField || null,
|
||||
results,
|
||||
penalties,
|
||||
pointsSystem: apiDto.pointsSystem || {},
|
||||
fastestLapTime: apiDto.fastestLapTime || 0,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user