diff --git a/server/mappers/productMapper.test.ts b/server/mappers/productMapper.test.ts index 931e8af..d9831ef 100644 --- a/server/mappers/productMapper.test.ts +++ b/server/mappers/productMapper.test.ts @@ -456,21 +456,26 @@ describe('toProductDocumentView', () => { * 单元测试: toProductView */ describe('toProductView', () => { + const baseData: Product = { + id: 1, + status: 'in-production', + translations: [ + { + id: 1, + name: 'Product Name', + summary: 'Product Summary', + description: 'Product Description', + }, + ], + }; test('convert raw data to ProductView correctly', () => { const rawData: Product = { - id: 1, - translations: [ - { - id: 1, - name: 'Product Name', - summary: 'Product Summary', - description: 'Product Description', - }, - ], + ...baseData, }; expect(toProductView(rawData)).toEqual({ id: '1', + status: 'in-production', name: 'Product Name', summary: 'Product Summary', description: 'Product Description', @@ -483,12 +488,13 @@ describe('toProductView', () => { test('convert raw data with missing translations', () => { const rawData: Product = { - id: 1, + ...baseData, translations: [], }; expect(toProductView(rawData)).toEqual({ id: '1', + status: 'in-production', name: '', summary: '', description: '', @@ -498,4 +504,23 @@ describe('toProductView', () => { specs: [], }); }); + + test('conert raw data with missing status', () => { + const rawData: Product = { + ...baseData, + status: undefined, + }; + + expect(toProductView(rawData)).toEqual({ + id: '1', + status: 'discontinued', + name: 'Product Name', + summary: 'Product Summary', + description: 'Product Description', + images: [], + documents: [], + faqs: [], + specs: [], + }); + }); }); diff --git a/server/mappers/productMapper.ts b/server/mappers/productMapper.ts index 453b85a..0111141 100644 --- a/server/mappers/productMapper.ts +++ b/server/mappers/productMapper.ts @@ -219,6 +219,8 @@ export function toProductDocumentView( export function toProductView(raw: Product): ProductView { const trans = raw.translations?.[0]; + const status = raw.status ?? 'discontinued'; + const images = toProductImageView(raw.images ?? []); const specs = toProductSpecGroupView(raw.specs ?? []); @@ -229,6 +231,7 @@ export function toProductView(raw: Product): ProductView { return { id: raw.id.toString(), + status: status, name: trans?.name ?? '', summary: trans?.summary ?? '', images: images, diff --git a/shared/types/views/product-view.ts b/shared/types/views/product-view.ts index 0c2a08a..653e5c1 100644 --- a/shared/types/views/product-view.ts +++ b/shared/types/views/product-view.ts @@ -1,4 +1,7 @@ import type { DocumentTypeView } from './document-list-view'; +import type { Product } from '../directus/my-schema.ts'; + +type ProductStatus = Product['status']; /** * 产品图片视图模型 @@ -90,6 +93,9 @@ export interface ProductView { /** 唯一标识符 **/ id: string; + /** 产品状态 **/ + status: ProductStatus; + /** 产品名称 **/ name: string;