# T022 — API converters 與未實作保護 > Status: `done` > Milestone: `M2` > Est. change: `~160 lines` ## Goal 完成後,Run domain 能完整轉成公開型別,並以 JWT、輸入驗證及測試固定 T020 的未實作保護。 ## Depends on - T021 ## Inputs - 讀取 / 依賴: - 檔案:`apps/backend/internal/types/m5_convert.go`、`apps/backend/internal/logic/scout/*run*_logic.go` - 既有能力 / API:response.Biz、middleware.UIDFrom、Pagination - Spec 段落:§5.1、§7 ## Outputs ### 程式變更(預期路徑) | 路徑 | 動作 | 說明 | |------|------|------| | `apps/backend/internal/types/m5_convert.go` | edit | 新增 Run/RunID/pagination converters。 | | `apps/backend/internal/logic/scout/list_scout_runs_logic.go` | edit | 加入 JWT 與 page/filter 驗證,保留明確 503 待 T034 替換。 | | `apps/backend/internal/logic/scout/list_scout_run_posts_logic.go` | edit | 加入 JWT、run ID 與 page 驗證,保留明確 503。 | | `apps/backend/internal/logic/scout/remove_scout_run_logic.go` | edit | 加入 JWT 與 run ID 驗證,保留明確 503。 | | `apps/backend/internal/types/m5_convert_test.go` | add/edit | 驗證公開欄位與 unix ns 原樣傳遞。 | ### 行為變更 - 未接 persistence 的新端點回 503xxx;舊端點不受影響。 ### API / 契約(若有) - 不回 owner_uid、provider token、payload 或內部錯誤堆疊。 ## Out of scope - 不實作實際列表、刪除或 job 建立。 ## Acceptance - [x] converter 覆蓋所有 run counters 與 shortfall reasons。 - [ ] 指令: ```bash cd apps/backend && go test ./internal/types ./internal/logic/scout/... -count=1 ``` 驗收結果:types 與 Scout logic 測試通過。 ## Notes T034 必須移除暫時 503 並用真 usecase 結果取代。