/** * 将 Directus 返回的 Question 数据转换为 ProductQuestionView 视图模型 * * @param raw: 原始的 Question 数据 * @returns 转换后的 ProductQuestionView 对象 * * @example * const view = toProductQuestionView(rawQuestion); */ export function toProductQuestionView(raw: Question): ProductQuestionView { const trans = raw.translations?.[0] ?? { title: '', content: '' }; return { id: raw.id, title: trans.title, content: trans.content, }; } /** * 将 Directus 返回的 Question 数据转换为 QuestionListView 视图模型 * * @param raw: 原始的 Question 数据 * @returns 转换后的 QuestionListView 对象 * --- * @example * const view = toQuestionListView(rawQuestion); */ export function toQuestionListView(raw: Question): QuestionListView { const trans = raw.translations?.[0] ?? { title: '', content: '' }; const related_products: QuestionListProduct[] = (raw.products ?? []) .filter(isObject) .map((item) => item.products_id) .filter(isObject) .map((item) => { const translations = item.translations[0] ?? { name: '' }; const product_type = isObject(item.product_type) && ({ id: item.product_type.id, name: item.product_type.translations[0]?.name ?? '', } satisfies QuestionListProductType); return { id: item.id, name: translations.name, type: product_type, }; }); return { id: raw.id, title: trans.title, content: trans.content, products: related_products, }; }