/** * 将 Directus 返回的 Document 数据转换为 ProductDocumentView 视图模型 * * @param raw: 原始的 Document 数据 * @returns 转换后的 ProductDocumentView 对象 * * @example * const view = toProductDocumentView(rawDocument); */ export function toProductDocumentView( raw: ProductDocument ): ProductDocumentView { const trans = raw.translations?.[0] ?? { title: '', }; const fileId = typeof raw.file === 'string' ? raw.file : raw.file?.id; const file = raw.file as DirectusFile; const { getFileUrl } = useDirectusFiles(); const url = getFileUrl(fileId); return { id: raw.id, filename: file.filename_download, title: trans.title, url: url, size: file.filesize, }; } /** * 将 Directus 返回的 Document 数据转换为 DocumentListView 视图模型 * * @param raw: 原始的 Document 数据 * @returns 转换后的 DocumentListView 对象 * * @example * const view = toDocumentListView(rawDocument); */ export function toDocumentListView(raw: ProductDocument): DocumentListView { const trans = raw.translations?.[0] ?? { title: '' }; const fileId = typeof raw.file === 'string' ? raw.file : raw.file?.id; const file = raw.file as DirectusFile; const { getFileUrl } = useDirectusFiles(); const url = getFileUrl(fileId); const related_products: DocumentListProduct[] = raw.products ?.filter(isObject) .map((item) => item.products_id) .filter(isObject) .map((item) => { const productType = isObject(item.product_type) && ({ id: item.product_type.id, name: item.product_type.translations?.[0]?.name, } satisfies DocumentListProductType); return { id: item.id, name: item.translations?.[0]?.name, type: productType, }; }); return { id: raw.id, filename: file.filename_download, title: trans.title, url: url, size: file.filesize, products: related_products, }; }