57 lines
1.4 KiB
Markdown
57 lines
1.4 KiB
Markdown
|
|
# T031 — Memory Run store
|
|||
|
|
|
|||
|
|
> Status: `done`
|
|||
|
|
> Milestone: `M3`
|
|||
|
|
> Est. change: `~190 lines`
|
|||
|
|
|
|||
|
|
## Goal
|
|||
|
|
|
|||
|
|
完成後,MemoryStore 完整實作 Run repository 契約並成為後續 usecase 的快速 contract test double。
|
|||
|
|
|
|||
|
|
## Depends on
|
|||
|
|
|
|||
|
|
- T030
|
|||
|
|
|
|||
|
|
## Inputs
|
|||
|
|
|
|||
|
|
- 讀取 / 依賴:
|
|||
|
|
- 檔案:`apps/backend/internal/module/scout/repository/memory.go`
|
|||
|
|
- 既有能力 / API:MemoryStore mutex、Post/Homework storage
|
|||
|
|
- Spec 段落:§3、§4 流程 D–F、§8
|
|||
|
|
|
|||
|
|
## Outputs
|
|||
|
|
|
|||
|
|
### 程式變更(預期路徑)
|
|||
|
|
|
|||
|
|
| 路徑 | 動作 | 說明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `apps/backend/internal/module/scout/repository/memory.go` | edit | 保存 runs,實作 guarded transition、run/result page、seen、publish、delete、counts。 |
|
|||
|
|
| `apps/backend/internal/module/scout/repository/memory_run_test.go` | add | 覆蓋排序、owner isolation、guard 與 paging。 |
|
|||
|
|
|
|||
|
|
### 行為變更
|
|||
|
|
|
|||
|
|
- 終態不倒退;run/result 順序都有 ID tie-breaker。
|
|||
|
|
|
|||
|
|
### API / 契約(若有)
|
|||
|
|
|
|||
|
|
- running/failed run 的 staged posts 不出現在公開 result page。
|
|||
|
|
|
|||
|
|
## Out of scope
|
|||
|
|
|
|||
|
|
- 不模擬 Mongo driver 細節或真 transaction。
|
|||
|
|
|
|||
|
|
## Acceptance
|
|||
|
|
|
|||
|
|
- [x] 同資料重複查頁順序一致,跨 owner 無資料洩漏。
|
|||
|
|
- [ ] 指令:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd apps/backend && go test ./internal/module/scout/repository -run MemoryRun -count=1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
驗收結果:3 MemoryRun tests passed。
|
|||
|
|
|
|||
|
|
## Notes
|
|||
|
|
|
|||
|
|
copy 回傳物件與 slice,避免測試呼叫者修改 store 內部狀態。
|