51 lines
1.6 KiB
Markdown
51 lines
1.6 KiB
Markdown
|
|
# T600 — scout-promote-to-opportunity
|
|||
|
|
|
|||
|
|
> Status: `done`
|
|||
|
|
> Milestone: `M6`
|
|||
|
|
> Kind: `feat`
|
|||
|
|
> Est. change: `~170 lines`
|
|||
|
|
|
|||
|
|
## Goal
|
|||
|
|
|
|||
|
|
完成後系統應:`POST /api/v1/scout/posts/:id/promote` 以**複製**方式建立新 Opportunity 並記 `source_scout_post_id`,原 ScoutPost 狀態不變。
|
|||
|
|
|
|||
|
|
## Depends on
|
|||
|
|
|
|||
|
|
- T530、T567
|
|||
|
|
|
|||
|
|
## Inputs
|
|||
|
|
|
|||
|
|
- Spec:`../spec.md` §4.10、§9.6(PR-01、PR-02)
|
|||
|
|
- 既有:`apps/backend/internal/logic/scout/**`、`internal/module/scout/domain`(`outreach_status`)
|
|||
|
|
|
|||
|
|
## Outputs
|
|||
|
|
|
|||
|
|
### 程式變更(預期路徑)
|
|||
|
|
|
|||
|
|
| 路徑 | 動作 | 說明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `apps/backend/generate/api/radar.api` 或既有 scout 契約 | edit | promote route(掛既有 `scout` group) |
|
|||
|
|
| `apps/backend/internal/logic/scout/promotePostLogic.go` | add | 讀 ScoutPost → 組 Opportunity 輸入 → 跑同一套判定 → 回 `opportunity_id` |
|
|||
|
|
| `apps/backend/internal/module/radar/usecase/promote.go` | add | `source=scout_promote`+`source_scout_post_id` |
|
|||
|
|
|
|||
|
|
### 行為變更
|
|||
|
|
|
|||
|
|
- 兩邊狀態機**完全不共用**:promote 後推進 CRM 不影響 `outreach_status`。
|
|||
|
|
- 同一 ScoutPost 重複 promote:以 `external_id` 去重,回既有 `opportunity_id`。
|
|||
|
|
- 跑同一套五問判定與配額/計費規則(受當日上限約束)。
|
|||
|
|
|
|||
|
|
## Out of scope
|
|||
|
|
|
|||
|
|
- 前端動作(T601)
|
|||
|
|
- 修改既有海巡三模式行為(必須不變)
|
|||
|
|
|
|||
|
|
## Acceptance
|
|||
|
|
|
|||
|
|
- [x] PR-01:promote 後新 Opportunity 存在且 `source_scout_post_id` 正確,原 ScoutPost 狀態不變
|
|||
|
|
- [x] PR-02:CRM 推進不影響 `outreach_status`
|
|||
|
|
- [x] 指令:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd apps/backend && make gen-api && go test ./internal/logic/scout/... ./internal/module/radar/... -count=1
|
|||
|
|
```
|