Merge pull request 'fix: tolerate missing race cover image field' (#33) from fix/race-cover-api-backcompat into main
Some checks failed
CI / build-and-test (push) Has been cancelled

Reviewed-on: #33
This commit was merged in pull request #33.
This commit is contained in:
2026-04-27 20:08:11 +00:00
2 changed files with 7 additions and 3 deletions

View File

@@ -66,7 +66,7 @@ export function rowToDto(row: RaceRow): RaceDto {
distanceKm: parseFloat(row.distance_km), distanceKm: parseFloat(row.distance_km),
status: row.status, status: row.status,
officialUrl: row.official_url, officialUrl: row.official_url,
coverImageUrl: row.cover_image_url, coverImageUrl: row.cover_image_url ?? null,
startTime: row.start_time, startTime: row.start_time,
clusterSchedule: row.cluster_schedule, clusterSchedule: row.cluster_schedule,
bibPickup: row.bib_pickup, bibPickup: row.bib_pickup,

View File

@@ -10,6 +10,10 @@ function isNullableString(value: unknown): value is string | null {
return value === null || typeof value === "string"; 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 { function normalizeRace(input: unknown): Race {
const race = input as Partial<Race>; const race = input as Partial<Race>;
@@ -23,7 +27,7 @@ function normalizeRace(input: unknown): Race {
race?.status === "registered" || race?.status === "registered" ||
race?.status === "completed") && race?.status === "completed") &&
isNullableString(race?.officialUrl) && isNullableString(race?.officialUrl) &&
isNullableString(race?.coverImageUrl) && isOptionalNullableString(race?.coverImageUrl) &&
isNullableString(race?.startTime) && isNullableString(race?.startTime) &&
isNullableString(race?.clusterSchedule) && isNullableString(race?.clusterSchedule) &&
isNullableString(race?.bibPickup) && isNullableString(race?.bibPickup) &&
@@ -49,7 +53,7 @@ function normalizeRace(input: unknown): Race {
distanceKm: race.distanceKm, distanceKm: race.distanceKm,
status: race.status, status: race.status,
officialUrl: race.officialUrl, officialUrl: race.officialUrl,
coverImageUrl: race.coverImageUrl, coverImageUrl: race.coverImageUrl ?? null,
startTime: race.startTime, startTime: race.startTime,
clusterSchedule: race.clusterSchedule, clusterSchedule: race.clusterSchedule,
bibPickup: race.bibPickup, bibPickup: race.bibPickup,