/** * Product JSON - 商品文件夹契约(TS 侧) * 对应 server/schemas/product.py(Pydantic 为真源) * 详见 docs/contracts/product-json.md */ export type Stage = 'collected' | 'edited' | 'published'; export interface ProductJson { _meta: { schemaVersion: 1; stage: Stage; createdAt: string; // ISO 8601 updatedAt: string; }; // Ozon 字段(对齐 ImportProductsV3) offer_id: string; name: string; description: string; description_category_id: number | null; price: string; old_price?: string; currency_code: 'RUB' | 'CNY'; vat: string; depth: number | null; width: number | null; height: number | null; dimension_unit: 'mm' | 'cm'; weight: number | null; weight_unit: 'g' | 'kg'; images: string[]; // 发布时填公网 URL primary_image?: string; color_image?: string; attributes: any[]; // 工作台映射后才填 complex_attributes?: any[]; // 本地扩展字段(下划线前缀) _images: { main: ImageMeta[]; sku: ImageMeta[]; detail: ImageMeta[]; video: ImageMeta[]; }; _raw: { title: string; price: string; params?: Array<{ key: string; value: string }>; desc?: string; }; _pricing?: any; // 工作台计价结果 } export interface ImageMeta { file: string; // 相对路径:images/main/main-001.jpg sourceUrl: string; // 源站 URL(可能失效) variantName?: string; // SKU 规格名 w?: number; h?: number; } export interface SourcesJson { sources: Array<{ platform: '1688' | 'taobao' | 'ozon'; itemId: string | null; url: string; collectedAt: string; // ISO 8601 counts: Record; }>; dedupeKeys: string[]; // URL 去重指纹 }