feat(edit): 编辑上报细节优化

This commit is contained in:
2026-10-06 18:30:05 +08:00
parent e20cd7547f
commit 79b310efe7
92 changed files with 2764 additions and 368 deletions
+6 -2
View File
@@ -24,6 +24,8 @@
Headers:扩展 Bearer token 与 `Idempotency-Key` 必填。请求体为已定义的 `CollectedProductPayload`,其 `source` 至少包含 `platform`、`itemKey`、`canonicalUrl`、`collectedAt`、`parserVersion`;`variants` 仅列来源有稳定证据的真实组合,媒体只传来源 URL、`mediaType`(`image` / `video`)、可选 `posterUrl`、关系和证据,不传二进制。
2026-10-06 SKU 容量修订:单次采集的 `variants` 上限从 100 提高到 1000,商品草稿完整保存采用同一上限,以支持真实多 SKU 来源商品从采集进入编辑。插件本地校验和 API 共享同一常量 `PRODUCT_VARIANT_LIMIT`;超过 1000 时明确提示「单个商品最多支持 1000 个 SKU」,整个采集失败,不截断 SKU 或创建部分商品。此限制不等于工作空间采集商品数配额,也不改变首次发布每批最多 50 个 SKU、媒体候选和其他字段的既有约束。采集响应 `collection_item.variant_count` 返回该商品实际未删除 SKU 数,复采仍保持商品和同 key SKU 身份。
请求体不得包含或传入 `workspace_id`、`target_platform_id`、`platform_id`、`store_id`、`api_key`、Cookie、授权头或来源站会话字段。服务端从扩展令牌解析工作空间,并将来源 `platform` 映射为系统已启用的来源平台。
服务端在一个事务中:检查工作空间采集箱上限 → 按 `workspace + source_platform + source_item_key` 查找活动记录 → 创建记录,或以本次页面快照覆盖已有记录的来源 URL、标题、价格、原始证据、规范化载荷与候选素材。采集阶段的图片和视频只保存为 `pending_selection` 候选记录,**不下载媒体、不投递素材 Worker**;用户在编辑流程中选择媒体后,才调用按需转存接口。重复上报不会增加采集箱配额,且会保留原有 `collection_item` 与 `product` ID;旧快照中尚未完成的候选或任务会被取消,新快照使用新的来源快照版本,旧 Worker 不得回写新快照。
@@ -32,13 +34,15 @@ Headers:扩展 Bearer token 与 `Idempotency-Key` 必填。请求体为已定
1688 结构化采集以 `skuModel.skuInfoMap` 的真实可售记录生成 SKU;每条记录的 `price`(CNY)按两位小数四舍五入后写入对应 SKU 的 `purchase_cost_cny`,`skuProps.value` 中按规格名称匹配的图片作为带 `variantSourceKey` 的 `source_sku` 候选。尚无平台编辑草稿时,重复采集会刷新来源采购价;进入编辑器后不覆盖用户修改过的采购价。SKU 对应的来源图片可在编辑页预览,用户选择后才转存并保存为正式主图。
2026-10-05 货源地址修订:插件已通过 `source.canonicalUrl` 上报商品详情页地址(1688、淘宝、天猫、Ozon 均适用)。新建商品时同时初始化 `products.purchase_url`,供编辑器「货源链接」使用。编辑快照的 `product.common.purchase_url` 优先返回手工保存的非空链接,未填写时回退该采集记录的 `source_url`,使历史已采集商品无需重新采集即可显示来源地址;手动创建且无来源地址的商品仍为空。重复采集更新来源地址,已填写的商品货源链接保持不变;清空货源链接表示恢复使用采集来源地址。接口字段结构不变。
成功返回 `201`(新建)或 `200`(复用):
```json
{ "data": {
"collection_item": { "id": "uuid", "status": "ready_for_edit", "source_title": "商品标题", "variant_count": 3 },
"product_id": "uuid", "reused": false, "refreshed": false,
"editor_entry_path": "/products/uuid",
"editor_entry_path": "/products/product-uuid/editor?collection_item_id=collection-uuid",
"materialization": { "total": 12, "pending_selection": 12, "queued": 0, "succeeded": 0, "failed": 0 }
} }
```
@@ -130,4 +134,4 @@ Headers:`Idempotency-Key` 必填。先由列表读取 `active_count` 并展示
## 6. 与商品编辑接口的边界
`editor_entry_path` 只是 ERP 前端入口。下一批商品编辑接口会在用户进入该入口时根据页头目标平台取得/创建 `product_platform_profile`、预选默认店铺、允许切换同平台店铺,并定义 SKU 编辑、AI、定价确认、图片选择与仅未导入 SKU 的首次上架。
2026-10-05 插件入口修订:插件采集返回的 `editor_entry_path` 为 `/products/{product_id}/editor?collection_item_id={collection_item_id}`。「编辑上架」采集成功后打开此地址并提示「已打开商品编辑页」;「采集商品」仍只采集、不打开编辑页。新采集和重复采集均使用响应的真实商品 ID,复采继续进入原商品。入口携带的采集记录 ID 供 Web 在当前页头平台下调用 `POST /api/collection-items/{id}/editor-contexts` 初始化或复用上下文,再读取商品编辑快照;返回的商品 ID 必须与路径一致。无默认店铺时保留已有 `DEFAULT_STORE_REQUIRED` 提示,不在采集接口中猜测目标平台或绑定店铺。已有上下文沿用用户编辑资料和发布状态,不重复上架。手动创建的旧 `/products/{product_id}` 入口及采集测试页路由仍保留。