fix(approval_db): 修復 incident_id 篩選查空 DB 欄位而非 JSON 導致執行斷路
Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled
Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled
get_all_approvals(incident_id=...) 原本在應用層過濾
a.metadata.get("incident_id"),但 ApprovalRecord.incident_id
是直接欄位,不在 extra_metadata JSON,導致永遠返回空列表,
Telegram 批准後出現 telegram_approval_not_found_by_incident,
審批從未實際執行。改為 .where(ApprovalRecord.incident_id == incident_id)
DB 層直接篩選,同時效能更佳。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -682,9 +682,11 @@ class ApprovalDBService:
|
||||
if status is not None:
|
||||
query = query.where(ApprovalRecord.status == status)
|
||||
|
||||
# Incident ID 篩選 (從 extra_metadata JSON 欄位)
|
||||
# NOTE: 這是基於 JSON 欄位查詢,效能可能受影響
|
||||
# 若有效能問題,考慮新增 incident_id 欄位到 ApprovalRecord
|
||||
# 2026-04-09 Claude Sonnet 4.6: 修復 incident_id 篩選 — 直接用 DB 欄位
|
||||
# 舊版在應用層查 a.metadata.get("incident_id") 但 ApprovalRecord.incident_id
|
||||
# 是直接欄位,不在 extra_metadata JSON 裡,導致 telegram_approval_not_found_by_incident
|
||||
if incident_id:
|
||||
query = query.where(ApprovalRecord.incident_id == incident_id)
|
||||
|
||||
query = query.order_by(ApprovalRecord.created_at.desc())
|
||||
query = query.offset(offset).limit(limit)
|
||||
@@ -694,13 +696,6 @@ class ApprovalDBService:
|
||||
|
||||
approvals = [approval_record_to_request(r) for r in records]
|
||||
|
||||
# 若有 incident_id 篩選,在應用層過濾
|
||||
if incident_id:
|
||||
approvals = [
|
||||
a for a in approvals
|
||||
if a.metadata and a.metadata.get("incident_id") == incident_id
|
||||
]
|
||||
|
||||
return approvals
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user