/** * 将 Directus 返回的 Homepage 数据转换为 HomepageView 视图模型 * * @param raw: 原始的 Homepage 数据 * @returns 转换后的 HomepageView 对象 * * @example * const view = toHomepageView(rawHomepage); */ export function toHomepageView(raw: Homepage): HomepageView { const carousel = (raw.carousel ?? []) .filter(isObject) .map((item) => item.directus_files_id) .filter((item) => typeof item === 'string'); const products = (raw.recommend_products ?? []) .filter(isObject) .map((item) => { const cover = isObject(item.cover) ? item.cover.id : item.cover; return { id: item.id, name: item.translations?.[0].name, summary: item.translations?.[0].summary, cover: cover, } satisfies HomepageProductView; }); const solutions = (raw.recommend_solutions ?? []) .filter(isObject) .map((item) => { const cover = isObject(item.cover) ? item.cover.id : item.cover; return { id: item.id, title: item.translations?.[0].title, summary: item.translations?.[0].summary, cover: cover, } satisfies HomepageSolutionView; }); return { id: raw.id, carousel: carousel ?? [], recommendProducts: products ?? [], recommendSolutions: solutions ?? [], }; }