thread-master/docs/product/brand-product-radar/tasks/T701-mongo-product-match-in...

51 lines
1.6 KiB
Markdown
Raw Normal View History

2026-08-13 02:22:24 +00:00
# T701 — mongo product match indexes
> Status: `done`
> Milestone: `M0` · Phase A
> Kind: `feat` · Est. change: `~120 lines`
## Goal
新增產品型 watch 與 ProductMatch 查詢索引,同時保留既有 Opportunity 唯一鍵與舊資料可讀性。
## Depends on
- T700
## Inputs
- `../spec.md` §6、§8
- `apps/backend/generate/database/mongo/000014_demand_radar_indexes.*.json`
- 代表性 nested ProductMatch 查詢與排序條件
## Outputs
| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/backend/generate/database/mongo/000015_brand_product_radar_indexes.up.json` | add | watch context、產品查詢與 primary 排序索引 |
| `apps/backend/generate/database/mongo/000015_brand_product_radar_indexes.down.json` | add | 只移除本 migration 新增索引 |
| `apps/backend/internal/module/radar/repository/**_test.go` | edit/add | 舊唯一鍵與查詢 shape 測試 |
## Behavior
- `(owner_uid, external_id)` 唯一索引不可改成含 product_id。
- 索引不得依賴所有舊文件都有新欄位。
- 避免無效 compound multikey 設計;以代表性 explain 確認 product filter 可用索引。
## Out of scope
- 資料批次回填或刪除舊索引
- repository merge 實作T732
## Acceptance
- [x] migration JSON 可解析,且只新增本 migration 的索引。
- [x] 既有 ownerexternal 唯一鍵未被 product_id 改寫。
```bash
cd apps/backend && go test ./internal/module/radar/repository/... -count=1
```
Implementation result (2026-08-10): added the 000015 watch/opportunity ProductMatch
query indexes and a migration-shape regression test; the repository package passes.