51 lines
4.5 KiB
Markdown
51 lines
4.5 KiB
Markdown
## 采集功能对接计划(方案三:扩展并入主仓 + 上报开关 + 自动打开试算页)
|
||
|
||
**架构决策**(已确认):
|
||
- ISS 扩展整体并入主仓 **`extensions/collector/`**(复数容器目录容纳未来多个 Chrome 插件,子目录用功能名;extension-v2 原地冻结、docs 标注废弃)
|
||
- 整个项目作为一个应用部署(server 8800 + studio 8900 + 扩展独立构建)
|
||
- 「ISS 独立产品化」远期通过构建/配置裁剪实现(扩展天然独立分发;server 的 suite API 模块不依赖 products),**本次不实现配置化,只保证模块边界不阻碍**
|
||
- 本地阶段不做 Token/鉴权:`/api/materials` 用 settings 开关放开鉴权(`app_auth_enabled: bool = False`,远期可开回)
|
||
|
||
---
|
||
|
||
### Step 1:扩展并入主仓
|
||
|
||
1. 清空主仓 `extension/`(现为空壳,只有 .output/.wxt 残留)
|
||
2. 将 `image-suite-studio/extension/` 整体复制到主仓 **`extensions/collector/`**(src/collector、src/profiles、src/bridge、src/api、src/storage、entrypoints/{background,content,bridge.content,panel.content,sidepanel}、wxt.config.ts、package.json)
|
||
3. 构建方式:`pnpm -C extensions/collector build`(wxt 独立构建 → .output/chrome-mv3),不进 start.command(扩展是手动加载 unpacked)
|
||
4. wxt.config.ts / package.json 的 name 改为 `ozon-collector-extension`(或同语境命名)
|
||
|
||
### Step 2:上报功能改造(并入版扩展内,~150 行)
|
||
|
||
1. **`src/storage/settings.ts`**:BackendSettings 增加 `reportEnabled: boolean`(默认 true)、`reportBaseUrl: string`(默认 `http://127.0.0.1:8800`)、`studioBaseUrl: string`(默认 `http://localhost:8900`);loadSettings 合并逻辑补新字段默认值
|
||
2. **`src/api/report.ts`(新文件)**:`reportProduct(reportBaseUrl, payload)` → `POST {reportBaseUrl}/api/materials`,返回 `{ product_id, created }`。payload 组装:`{ platform, item_id, url, texts, images: [{url, group_key, variant_name, type, width, height}] }`——texts 用现成 `editedTexts()`,images 用 `buildGeneratePayload` 同款映射(ScanResult.images + uploadedImages 按 selectedKeys 过滤);实施时先读主仓 `server/schemas/collection.py` 对齐字段名
|
||
3. **`entrypoints/background.ts`**:照 `planSuite` 分支模式新增 action `reportProduct`(L17-56 监听器内加一个分支)
|
||
4. **`entrypoints/sidepanel/App.tsx`**:
|
||
- settingsPopup(L615-670):新增「上报商品」开关 + 「OSK 后台地址」+ 「试算页地址」三个设置项
|
||
- 01 商品信息 Section 末尾(L784 警告框后):加「上报商品」按钮——reportEnabled 且已采集时可用;点击 → `send('reportProduct', ...)` → 成功后 `chrome.tabs.create({ url: \`${studioBaseUrl}/trial/${product_id}\` })` + 成功提示;失败弹错误
|
||
5. 面板内生图功能保持不变(本期不动)
|
||
|
||
### Step 3:主仓 server 小改(免鉴权开关)
|
||
|
||
1. `server/config/settings.py`:加 `app_auth_enabled: bool = False`
|
||
2. `server/deps.py`:`get_current_user` 在 `app_auth_enabled=False` 时直接返回占位用户(跳过 JWT 校验);True 时走现有 JWT 逻辑——远期开鉴权只改配置
|
||
3. 主仓 `/api/materials` 契约已兼容 ISS ScanResult(响应已含 `product_id`),无需改动;重复采集同一商品返回同一 product_id(已实现),自动打开即回到原试算页
|
||
|
||
### Step 4:文档
|
||
|
||
1. `docs/v2.1/collect.md`:更新为方案三(扩展并入 `extensions/collector/` + 上报开关 + 配置化独立预留),标注 D2 决策修订、extension-v2 冻结
|
||
2. `docs/v2.1/README.md`:Phase C 状态与实施方式更新
|
||
3. 主仓 `README.md`:扩展部分改为指向 `extensions/collector/`
|
||
|
||
### Step 5:验证
|
||
|
||
1. `pnpm -C extensions/collector build` → Chrome 开发者模式加载 `.output/chrome-mv3`
|
||
2. Ozon / 1688 / 淘宝商详页:快速采集 → 面板出现数据 → 点「上报商品」→ 新标签自动打开 `http://localhost:8900/trial/{id}`,采集箱出现该商品
|
||
3. 同一商品重复采集上报 → 打开同一试算页(不重复建商品)
|
||
4. 后端未启动时上报 → 面板显示错误提示
|
||
5. 主仓 `pnpm build` + 类型检查通过
|
||
|
||
### 后续阶段(不在本次范围)
|
||
|
||
- **Phase B**:从 ISS server 平移 planner/generator/prompts/watermark/tasks 到主仓 server(/api/suite/* 等),打通试算页一键生成与单张 AI 生图——试算页前端契约已按此写好
|
||
- 远期「ISS-only 产品模式」:studio 构建变量裁剪路由 + server 鉴权范围配置 |