106 lines
3.3 KiB
Markdown
106 lines
3.3 KiB
Markdown
# 星图达人视频传播数据导出 Implementation Plan
|
||
|
||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||
|
||
**Goal:** 导出 CSV 前按配置调用 `get_author_spread_info`,追加个人视频和星图视频传播指标列。
|
||
|
||
**Architecture:** 新增独立的 spread-info 模块负责参数配置、URL、响应映射和并发加载;列表解析保留 `authorId`,额外保存 `spreadAuthorId` 作为 `o_author_id`;CSV exporter 只负责把已加载的 spread metrics 输出成列。导出入口在生成 CSV 前补齐 spread metrics。
|
||
|
||
**Tech Stack:** TypeScript, Chrome content script, Vitest, jsdom.
|
||
|
||
---
|
||
|
||
### Task 1: Spread Info Client And Mapping
|
||
|
||
**Files:**
|
||
- Create: `src/content/market/spread-info.ts`
|
||
- Modify: `src/content/market/types.ts`
|
||
- Test: `tests/spread-info.test.ts`
|
||
|
||
- [ ] **Step 1: Write failing tests**
|
||
|
||
Cover URL construction, label/header generation, response mapping, personal-video fixed params, and Xingtu-video multi-param configs.
|
||
|
||
- [ ] **Step 2: Run failing tests**
|
||
|
||
Run: `npx vitest run tests/spread-info.test.ts`
|
||
Expected: FAIL because `spread-info.ts` does not exist.
|
||
|
||
- [ ] **Step 3: Implement spread-info module and types**
|
||
|
||
Implement typed configs, formatter helpers, response mapper, client, and limited-concurrency loader.
|
||
|
||
- [ ] **Step 4: Run tests**
|
||
|
||
Run: `npx vitest run tests/spread-info.test.ts`
|
||
Expected: PASS.
|
||
|
||
### Task 2: Preserve Spread Author ID From Search Rows
|
||
|
||
**Files:**
|
||
- Modify: `src/content/market/types.ts`
|
||
- Modify: `src/content/market/market-list-row.ts`
|
||
- Modify: `src/content/market/page-bridge.ts`
|
||
- Test: `tests/market-page-bridge.test.ts`
|
||
- Test: `tests/silent-export-controller.test.ts`
|
||
|
||
- [ ] **Step 1: Write failing tests**
|
||
|
||
Verify `attribute_datas.id` is retained as `spreadAuthorId` and preferred over top-level `star_id` for spread-info requests.
|
||
|
||
- [ ] **Step 2: Run failing tests**
|
||
|
||
Run focused tests for row parsing and silent export.
|
||
|
||
- [ ] **Step 3: Implement parser changes**
|
||
|
||
Store `spreadAuthorId` on snapshots and merge it in result store.
|
||
|
||
- [ ] **Step 4: Run focused tests**
|
||
|
||
Expected: PASS.
|
||
|
||
### Task 3: CSV Columns
|
||
|
||
**Files:**
|
||
- Modify: `src/content/market/csv-exporter.ts`
|
||
- Test: `tests/csv-exporter.test.ts`
|
||
|
||
- [ ] **Step 1: Write failing tests**
|
||
|
||
Verify spread headers append after backend metrics and blank cells are exported when metrics are absent.
|
||
|
||
- [ ] **Step 2: Implement CSV spread columns**
|
||
|
||
Read `record.spreadMetrics` by generated header names.
|
||
|
||
- [ ] **Step 3: Run focused tests**
|
||
|
||
Run: `npx vitest run tests/csv-exporter.test.ts`
|
||
Expected: PASS.
|
||
|
||
### Task 4: Export Hydration
|
||
|
||
**Files:**
|
||
- Modify: `src/content/market/index.ts`
|
||
- Modify: `src/content/market/result-store.ts`
|
||
- Test: `tests/market-content-entry.test.ts`
|
||
|
||
- [ ] **Step 1: Write failing tests**
|
||
|
||
Verify export calls spread-info with `spreadAuthorId`, waits before CSV generation, preserves row order, and leaves blanks on failure.
|
||
|
||
- [ ] **Step 2: Implement hydration**
|
||
|
||
Inject `loadSpreadMetrics` for tests, default to spread-info loader, and hydrate records before `buildCsv`.
|
||
|
||
- [ ] **Step 3: Run focused tests**
|
||
|
||
Run focused content-entry tests.
|
||
|
||
### Task 5: Final Verification
|
||
|
||
- [ ] Run `npm test`.
|
||
- [ ] Run `npm run build`.
|
||
- [ ] Review `git diff`.
|