import { RacesViewData, RacesRace } from '@/lib/view-data/races/RacesViewData'; /** * Races View Data Builder * * Transforms API DTO into ViewData for the races template. * Deterministic, side-effect free. */ export class RacesViewDataBuilder { static build(apiDto: any): RacesViewData { const races = apiDto.races.map((race: any) => ({ id: race.id, track: race.track, car: race.car, scheduledAt: race.scheduledAt, status: race.status as 'scheduled' | 'running' | 'completed' | 'cancelled', sessionType: 'race', leagueId: race.leagueId, leagueName: race.leagueName, strengthOfField: race.strengthOfField ?? undefined, isUpcoming: race.status === 'scheduled', isLive: race.status === 'running', isPast: race.status === 'completed', })); const totalCount = races.length; const scheduledRaces = races.filter((r: RacesRace) => r.isUpcoming); const runningRaces = races.filter((r: RacesRace) => r.isLive); const completedRaces = races.filter((r: RacesRace) => r.isPast); return { races, totalCount, scheduledRaces, runningRaces, completedRaces, }; } }