51 lines
1.8 KiB
Markdown
51 lines
1.8 KiB
Markdown
# T545 — today-api-stats-and-empty-reasons
|
||
|
||
> Status: `done`
|
||
> Milestone: `M3`
|
||
> Kind: `feat`
|
||
> Est. change: `~180 lines`
|
||
|
||
## Goal
|
||
|
||
完成後系統應:`GET /api/v1/radar/today` 回今日筆數+高/中/低分項+首頁卡片,0 筆時回**明確原因與下一步**。
|
||
|
||
## Depends on
|
||
|
||
- T525、T526
|
||
|
||
## Inputs
|
||
|
||
- Spec:`../spec.md` §4.4、§5.2、§9.3(TD-01、TD-02)
|
||
|
||
## Outputs
|
||
|
||
### 程式變更(預期路徑)
|
||
|
||
| 路徑 | 動作 | 說明 |
|
||
|------|------|------|
|
||
| `apps/backend/generate/api/radar.api` | edit | today resp type:`stats`、`groups`、`empty_reason`、`truncated_count` |
|
||
| `apps/backend/internal/logic/radar/getRadarTodayLogic.go` | edit | 統計與卡片查詢 |
|
||
| `apps/backend/internal/module/radar/usecase/today.go` | add | 統計聚合+空狀態原因判定 |
|
||
|
||
### 行為變更
|
||
|
||
- 只計 `qualified`/`accepted`/`dismissed`(**排除 `rejected`**)於今日名單;`rejected` 另有 filter 可查。
|
||
- 空狀態原因由後端判定並回列舉值+人話說明:`not_swept_yet`(未到巡的時間)/`all_watches_paused`/`no_watch`/`no_profile`/`sweep_failed`/`no_hit`(關鍵字太窄),各帶建議動作。
|
||
- 帶當日 `truncated_count` 供前端顯示「N 筆較低意向未收錄」。
|
||
- 卡片欄位:原文摘要、`intent_score`、`intent_band`、`region_detected`、`posted_at`(ns,前端換算)、預設 `public_comment` 回覆(若已生成)。
|
||
|
||
## Out of scope
|
||
|
||
- 前端畫面(T551)
|
||
- 回覆生成(T549)
|
||
|
||
## Acceptance
|
||
|
||
- [x] TD-01:18 筆 → 統計與分項正確、卡片欄位齊
|
||
- [x] TD-02:0 筆 → 回可辨識的 `empty_reason` 與建議,非空白 `list`
|
||
- [x] 指令:
|
||
|
||
```bash
|
||
cd apps/backend && make gen-api && go test ./internal/logic/radar/... ./internal/module/radar/... -count=1
|
||
```
|