56 lines
1.5 KiB
Markdown
56 lines
1.5 KiB
Markdown
|
|
# T801 — frontend inbox domain repository seam
|
|||
|
|
|
|||
|
|
> Status: `done`
|
|||
|
|
> Milestone: `M0`
|
|||
|
|
> Est. change: `~160 lines`
|
|||
|
|
|
|||
|
|
## Goal
|
|||
|
|
|
|||
|
|
完成後 mock 與 live 前端共用同一組 Opportunity review、排序、CostPreview、DemandMap 與 Sweep funnel 型別/repository 介面。
|
|||
|
|
|
|||
|
|
## Depends on
|
|||
|
|
|
|||
|
|
- T800
|
|||
|
|
|
|||
|
|
## Inputs
|
|||
|
|
|
|||
|
|
- `apps/web/src/domain/types.ts`
|
|||
|
|
- `apps/web/src/data/repos.ts`
|
|||
|
|
- Spec §2、§7.2–§7.4
|
|||
|
|
|
|||
|
|
## Outputs
|
|||
|
|
|
|||
|
|
### 程式變更(預期路徑)
|
|||
|
|
|
|||
|
|
| 路徑 | 動作 | 說明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `apps/web/src/domain/types.ts` | edit | ReviewState、RemovalReason、Priority、DemandMap、CostPreview、funnel types |
|
|||
|
|
| `apps/web/src/data/repos.ts` | edit | 擴充 RadarRepo,同時支援 mock/live |
|
|||
|
|
| `apps/web/src/data/fixtures/**` | add/edit | 固定 legacy、pending、removed、未知時間資料 |
|
|||
|
|
|
|||
|
|
### 行為變更
|
|||
|
|
|
|||
|
|
- 型別區分 `OpportunityStatus` 與 `review_state`;舊欄位可缺省並由 mapper 補映射。
|
|||
|
|
|
|||
|
|
### API / 契約(若有)
|
|||
|
|
|
|||
|
|
- 不新增前端私有 shape;repository method 對齊 T800。
|
|||
|
|
|
|||
|
|
## Out of scope
|
|||
|
|
|
|||
|
|
- 不改頁面視覺、不接 live HTTP、不實作 mock 行為。
|
|||
|
|
|
|||
|
|
## Acceptance
|
|||
|
|
|
|||
|
|
- [ ] TypeScript 可表達五種排序、三種 review state、移除原因與兩種 key mode。
|
|||
|
|
- [ ] mock/live repository signature 完全一致。
|
|||
|
|
- [ ] 指令:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd apps/web && npm run build && npm run test -- src/data src/domain
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Notes
|
|||
|
|
|
|||
|
|
保留既有 `intent_score`、`product_fit_score`,新加 `priority_score` 不取代歷史欄位。
|