From 78d0ab5ece7a520f94aee05988d20afe7d7d1833 Mon Sep 17 00:00:00 2001 From: "Vaka.pro" Date: Mon, 27 Apr 2026 23:07:31 +0300 Subject: [PATCH] fix: tolerate missing race cover image field --- backend/src/mappers/race.ts | 2 +- frontend/src/api/races.ts | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/backend/src/mappers/race.ts b/backend/src/mappers/race.ts index a8e47f2..18e6f85 100644 --- a/backend/src/mappers/race.ts +++ b/backend/src/mappers/race.ts @@ -66,7 +66,7 @@ export function rowToDto(row: RaceRow): RaceDto { distanceKm: parseFloat(row.distance_km), status: row.status, officialUrl: row.official_url, - coverImageUrl: row.cover_image_url, + coverImageUrl: row.cover_image_url ?? null, startTime: row.start_time, clusterSchedule: row.cluster_schedule, bibPickup: row.bib_pickup, diff --git a/frontend/src/api/races.ts b/frontend/src/api/races.ts index 97ee124..6d2b770 100644 --- a/frontend/src/api/races.ts +++ b/frontend/src/api/races.ts @@ -10,6 +10,10 @@ function isNullableString(value: unknown): value is string | null { return value === null || typeof value === "string"; } +function isOptionalNullableString(value: unknown): value is string | null | undefined { + return value === undefined || isNullableString(value); +} + function normalizeRace(input: unknown): Race { const race = input as Partial; @@ -23,7 +27,7 @@ function normalizeRace(input: unknown): Race { race?.status === "registered" || race?.status === "completed") && isNullableString(race?.officialUrl) && - isNullableString(race?.coverImageUrl) && + isOptionalNullableString(race?.coverImageUrl) && isNullableString(race?.startTime) && isNullableString(race?.clusterSchedule) && isNullableString(race?.bibPickup) && @@ -49,7 +53,7 @@ function normalizeRace(input: unknown): Race { distanceKm: race.distanceKm, status: race.status, officialUrl: race.officialUrl, - coverImageUrl: race.coverImageUrl, + coverImageUrl: race.coverImageUrl ?? null, startTime: race.startTime, clusterSchedule: race.clusterSchedule, bibPickup: race.bibPickup,