view data fixes
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 5m51s
Contract Testing / contract-snapshot (pull_request) Has been skipped

This commit is contained in:
2026-01-24 12:14:08 +01:00
parent dde77e717a
commit 046852703f
94 changed files with 1333 additions and 4885 deletions

View File

@@ -1,14 +1,29 @@
/**
* Race Detail View Data Builder
*
* Transforms API DTO to ViewData for templates.
*/
import type { RaceDetailDTO } from '@/lib/types/generated/RaceDetailDTO';
import type { RaceDetailEntry, RaceDetailLeague, RaceDetailRace, RaceDetailRegistration, RaceDetailUserResult, RaceDetailViewData } from '@/lib/view-data/RaceDetailViewData';
import type {
RaceDetailEntry,
RaceDetailLeague,
RaceDetailRace,
RaceDetailRegistration,
RaceDetailUserResult,
RaceDetailViewData
} from '@/lib/view-data/RaceDetailViewData';
import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder";
export class RaceDetailViewDataBuilder implements ViewDataBuilder<any, any> {
build(input: any): any {
return RaceDetailViewDataBuilder.build(input);
}
static build(apiDto: RaceDetailDTO): RaceDetailViewData {
export class RaceDetailViewDataBuilder {
/**
* Transform API DTO to ViewData
*
* @param apiDto - The DTO from the service
* @returns ViewData for the race detail page
*/
public static build(apiDto: RaceDetailDTO): RaceDetailViewData {
if (!apiDto || !apiDto.race) {
return {
race: {
@@ -33,7 +48,7 @@ export class RaceDetailViewDataBuilder implements ViewDataBuilder<any, any> {
track: apiDto.race.track || '',
car: apiDto.race.car || '',
scheduledAt: apiDto.race.scheduledAt,
status: apiDto.race.status as any,
status: apiDto.race.status as 'scheduled' | 'running' | 'completed' | 'cancelled',
sessionType: apiDto.race.sessionType || 'race',
};
@@ -42,15 +57,15 @@ export class RaceDetailViewDataBuilder implements ViewDataBuilder<any, any> {
name: apiDto.league.name,
description: apiDto.league.description || undefined,
settings: {
maxDrivers: (apiDto.league.settings as any)?.maxDrivers || 32,
qualifyingFormat: (apiDto.league.settings as any)?.qualifyingFormat || 'Open',
maxDrivers: apiDto.league.maxDrivers ?? 32,
qualifyingFormat: apiDto.league.qualifyingFormat ?? 'Open',
},
} : undefined;
const entryList: RaceDetailEntry[] = apiDto.entryList.map((entry: any) => ({
const entryList: RaceDetailEntry[] = (apiDto.entryList || []).map((entry) => ({
id: entry.id,
name: entry.name,
avatarUrl: entry.avatarUrl,
avatarUrl: entry.avatarUrl || '',
country: entry.country,
rating: entry.rating,
isCurrentUser: entry.isCurrentUser,
@@ -80,4 +95,6 @@ export class RaceDetailViewDataBuilder implements ViewDataBuilder<any, any> {
canReopenRace: (apiDto as any).canReopenRace || false,
};
}
}
}
RaceDetailViewDataBuilder satisfies ViewDataBuilder<RaceDetailDTO, RaceDetailViewData>;