TaskTraceStore public 查詢介面實作前確認

本頁為專案文件網站產出的閱讀版。

返回 docs

TaskTraceStore public 查詢介面實作前確認

本文件承接 MySQL TaskTraceStore 查詢邊界設計第三階段前置規劃,用來整理 TaskTraceStore public 查詢介面進入程式 repo 前必須先確認的範圍、命名、資料模型與驗證方式。

本文件只做實作前確認,不代表已同意新增 public interface、DTO、WebApi、ServiceHost、正式 DB 查詢、DDL、啟動流程或外部服務設定。

目前可用基礎

項目狀態說明
task_log_traces schema class已完成欄位、索引與 comment 已可由 C# class 維護。
MySqlLogWriter 第一版已完成可將 LogEntry 映射到 task_log_traces
payload sanitizer已完成可遮罩 password、token、secret、authorization 與 connection string 類資訊。
fake gateway 測試已完成已驗證寫入映射、fallback 與錯誤處理。
manual-only xUnit 入口已完成預設不連 DB、不寫入,需明確 gate 才會執行。
真實測試 DB 驗證已完成已完成 task_log_traces 寫入 / 查詢 / cleanup 驗證。
查詢邊界設計已完成已先固定 read-side 角色、查詢條件、SQL 安全與停止線。

是否建議進入 public 查詢介面

建議可以進入「實作前確認」,但不建議直接進入程式實作。

原因是 TaskTraceStore 會成為後續 WebApi、ServiceHost、Debug Tool 與資料庫儀表板共用的 read-side contract;如果命名、DTO、分頁、排序、遮罩規則或錯誤格式沒有先固定,後續 API 與 UI 很容易被第一版臨時模型綁住。

建議 public contract 邊界

項目建議備註
介面名稱優先評估 ITaskTraceStore延續 TaskStore 命名語意;進程式 repo 前仍需檢查既有命名慣例。
職責只讀 task_log_traces不改 Workflow 狀態、不寫入任務主檔、不執行 cleanup。
回傳格式使用專用 TaskTraceQueryResult + ErrorInfo目前 Core Result 不是泛型;不建議為 3A 第一版新增 Result<T>
查詢型態第一版建議採同步 Query(...)程式 repo 既有 MySQL TaskStore / LogWriter 為同步介面;後續 WebApi / ServiceHost 再另行評估 async。
DB 執行方式參數化 SQL不接受使用者輸入直接組 table、column、order by。
使用範圍Infrastructure read-sideWebApi / ServiceHost / UI 只能在後續階段引用,不在本次導入。

候選 method 形狀

以下只作為討論草案,不是最終 public method 簽章:

TaskTraceQueryResult Query(TaskTraceQueryRequest request);

這個草案依 TaskTraceStore 介面命名與 DTO 位置盤點 調整而來。

不建議第一版使用 Result<TaskTraceQueryResult>,因為目前 Core 只有非泛型 Result。若要新增泛型 Result,會變成另一個 public contract 決策,應另案討論。

Request model 候選欄位

欄位必填建議規則
TaskId若未提供,必須至少提供時間範圍或其他主要條件,避免全表查詢。
NodeId篩選特定節點 trace。
DeviceId篩選特定設備 trace。
CommandName篩選特定設備命令。
Level篩選 info / warning / error 類級別。
Status篩選 success / failed / timeout 類狀態。
ErrorCode篩選特定錯誤代碼。
CreatedFrom時間範圍起點。
CreatedTo時間範圍終點,不可早於 CreatedFrom
Limit預設 100,第一版最大建議 500。
Offset預設 0,不可小於 0。
SortDescending預設依 created_at 由新到舊。

Result model 候選欄位

欄位用途
Success是否查詢成功。
Items查回的 trace 清單。
Limit本次查詢限制筆數。
Offset本次查詢位移。
HasMore是否仍有下一頁資料。
Error失敗時使用 ErrorInfo
TimeTakenMs查詢耗時。
TotalCount第一版建議不做,避免大量資料查詢成本過高。

Items 建議至少包含:

驗證規則

規則建議處理
沒有任何查詢條件回傳 validation error,不執行全表查詢。
Limit 未填使用預設 100。
Limit 超過上限回傳 validation error 或壓到最大值;建議第一版回傳錯誤。
Offset 小於 0回傳 validation error。
CreatedTo 早於 CreatedFrom回傳 validation error。
字串條件過長回傳 validation error,避免異常查詢與 log 污染。
排序欄位第一版只允許 created_at,不開放任意欄位。

遮罩與安全規則

SQL 與資料庫查詢規則

錯誤碼建議

錯誤情境建議錯誤語意
查詢條件不合法TraceQueryInvalidRequest
未提供必要篩選條件TraceQueryFilterRequired
DB 查詢失敗TraceQueryDatabaseFailed
DB timeoutTraceQueryTimeout
schema 不符合預期TraceQuerySchemaMismatch
連線不可用TraceQueryConnectionUnavailable

實際錯誤碼名稱需進程式 repo 後比對既有 ErrorCode 命名風格再決定。

測試計畫

測試類型目的
Request validator unit test驗證必要條件、分頁、時間範圍、字串長度。
SQL builder fake test驗證 SQL 使用參數化、排序白名單與條件組合。
Row mapper test驗證 DB row 可轉為 TaskTraceItem
sanitizer output test驗證 read-side 回傳仍不洩漏敏感資訊。
fake gateway query test不連 DB 驗證查詢流程與錯誤處理。
manual-only 真實 DB 查詢測試使用者授權後,對測試 DB 執行查詢驗證;預設關閉。

停止線

以下項目不得在未確認前直接執行:

決策表

決策項建議是否已定案
介面名稱建議採 ITaskTraceStore待使用者確認
DTO 位置建議放在 HS.DeviceControl.Core.Logging待使用者確認
sync / async第一版建議同步 Query(TaskTraceQueryRequest request)待使用者確認
TaskTraceQueryResult建議採專用 result,內含 SuccessItemsErrorTimeTakenMs待使用者確認
TotalCount第一版不做,改用 HasMore待使用者確認
查詢上限預設 100,最大 500待使用者確認
無條件查詢不允許建議定案
排序欄位第一版只允許 created_at DESC建議定案
manual-only 真實 DB 查詢只在使用者授權與 gate 開啟後執行建議定案

建議下一步

程式 repo 命名與 DTO 位置盤點已完成,建議下一步由使用者確認以下 5 點:

  1. 允許新增 ITaskTraceStore
  2. 允許在 HS.DeviceControl.Core.Logging 新增 TaskTraceQueryRequestTaskTraceQueryResultTaskTraceItem
  3. 第一版採同步 Query(TaskTraceQueryRequest request)
  4. 第一版不做 TotalCount,改用 HasMore
  5. 第一版不允許無條件全表查詢。

確認後再進入程式 repo fake gateway 查詢實作;未確認前不新增 public contract。