feat: implement home winners selection logic with fallback handling and add integration tests
This commit is contained in:
26
src/spa/homeWinnerSelection.ts
Normal file
26
src/spa/homeWinnerSelection.ts
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user