feat: implement home winners selection logic with fallback handling and add integration tests

This commit is contained in:
syntaxbullet
2026-07-13 15:19:37 +02:00
parent b7c499dd35
commit ee7e891a7d
3 changed files with 61 additions and 16 deletions

View File

@@ -0,0 +1,26 @@
import { resolveCmsRelationship, type CmsRouteDoc } from '@/spa/cmsRoute'
const FALLBACK_YEAR = 2025
const FALLBACK_LIMIT = 8
type FallbackWinner = {
id: string | number
year?: string | number
}
export function resolveHomeWinners(
featured: unknown,
cmsWinners: CmsRouteDoc[],
fallbackWinners: FallbackWinner[],
) {
const selectedWinners = Array.isArray(featured) ? featured : []
const selectedWinnerDocs = selectedWinners
.map((selected) => resolveCmsRelationship(selected, cmsWinners))
.filter((winner): winner is CmsRouteDoc => Boolean(winner))
if (selectedWinnerDocs.length) return selectedWinnerDocs
return (cmsWinners.length ? cmsWinners : fallbackWinners)
.filter((winner) => Number(winner.year) === FALLBACK_YEAR)
.slice(0, FALLBACK_LIMIT)
}