From ebccb88278489d5fbf284cae1bb8fe475a6a053a Mon Sep 17 00:00:00 2001 From: OG T Date: Thu, 9 Apr 2026 19:05:48 +0800 Subject: [PATCH] =?UTF-8?q?fix(approval=5Fdb):=20=E4=BF=AE=E5=BE=A9=20inci?= =?UTF-8?q?dent=5Fid=20=E7=AF=A9=E9=81=B8=E6=9F=A5=E7=A9=BA=20DB=20?= =?UTF-8?q?=E6=AC=84=E4=BD=8D=E8=80=8C=E9=9D=9E=20JSON=20=E5=B0=8E?= =?UTF-8?q?=E8=87=B4=E5=9F=B7=E8=A1=8C=E6=96=B7=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- apps/api/src/services/approval_db.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/apps/api/src/services/approval_db.py b/apps/api/src/services/approval_db.py index b7a22c71..11cec470 100644 --- a/apps/api/src/services/approval_db.py +++ b/apps/api/src/services/approval_db.py @@ -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