feat: 页面描述 & 停产产品标示 #97

Manually merged
remilia merged 3 commits from feat/discontinued into master 2025-12-10 14:09:37 +08:00
3 changed files with 44 additions and 10 deletions
Showing only changes of commit 62ec215340 - Show all commits

View File

@ -456,9 +456,9 @@ describe('toProductDocumentView', () => {
* 单元测试: toProductView * 单元测试: toProductView
*/ */
describe('toProductView', () => { describe('toProductView', () => {
test('convert raw data to ProductView correctly', () => { const baseData: Product = {
const rawData: Product = {
id: 1, id: 1,
status: 'in-production',
translations: [ translations: [
{ {
id: 1, id: 1,
@ -468,9 +468,14 @@ describe('toProductView', () => {
}, },
], ],
}; };
test('convert raw data to ProductView correctly', () => {
const rawData: Product = {
...baseData,
};
expect(toProductView(rawData)).toEqual({ expect(toProductView(rawData)).toEqual({
id: '1', id: '1',
status: 'in-production',
name: 'Product Name', name: 'Product Name',
summary: 'Product Summary', summary: 'Product Summary',
description: 'Product Description', description: 'Product Description',
@ -483,12 +488,13 @@ describe('toProductView', () => {
test('convert raw data with missing translations', () => { test('convert raw data with missing translations', () => {
const rawData: Product = { const rawData: Product = {
id: 1, ...baseData,
translations: [], translations: [],
}; };
expect(toProductView(rawData)).toEqual({ expect(toProductView(rawData)).toEqual({
id: '1', id: '1',
status: 'in-production',
name: '', name: '',
summary: '', summary: '',
description: '', description: '',
@ -498,4 +504,23 @@ describe('toProductView', () => {
specs: [], 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: [],
});
});
}); });

View File

@ -219,6 +219,8 @@ export function toProductDocumentView(
export function toProductView(raw: Product): ProductView { export function toProductView(raw: Product): ProductView {
const trans = raw.translations?.[0]; const trans = raw.translations?.[0];
const status = raw.status ?? 'discontinued';
const images = toProductImageView(raw.images ?? []); const images = toProductImageView(raw.images ?? []);
const specs = toProductSpecGroupView(raw.specs ?? []); const specs = toProductSpecGroupView(raw.specs ?? []);
@ -229,6 +231,7 @@ export function toProductView(raw: Product): ProductView {
return { return {
id: raw.id.toString(), id: raw.id.toString(),
status: status,
name: trans?.name ?? '', name: trans?.name ?? '',
summary: trans?.summary ?? '', summary: trans?.summary ?? '',
images: images, images: images,

View File

@ -1,4 +1,7 @@
import type { DocumentTypeView } from './document-list-view'; 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; id: string;
/** 产品状态 **/
status: ProductStatus;
/** 产品名称 **/ /** 产品名称 **/
name: string; name: string;