feat(api): ADR-027 Phase 2 - 簽核/拒絕後自動同步 Incident 狀態

Router 整合點:
- POST /approvals/{id}/sign → on_approval_status_change("approved")
- POST /approvals/{id}/reject → on_approval_status_change("rejected")
- POST /approvals/bulk-approve → 批次同步

變更:
- 移除舊的 resolve_incident_after_approval() 調用
- 改用 IncidentApprovalService.on_approval_status_change()
- 同步失敗不阻斷主流程 (容錯設計)

ADR-027 進度: Phase 1-2  完成

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-03-26 19:44:59 +08:00
parent 42bf6a8729
commit fb03430469
2 changed files with 68 additions and 42 deletions

View File

@@ -1,6 +1,6 @@
# ADR-027: Incident-Approval 同步架構
**狀態**: 批准
**狀態**: 實作中 (Phase 1-2 ✅ 完成)
**日期**: 2026-03-26 (台北時區)
**決策者**: 統帥
**觸發**: 活躍事件顯示 0 + Telegram 告警鏈異常 (2026-03-26 首席架構師審查)
@@ -191,12 +191,28 @@ APPROVAL_TO_INCIDENT_STATUS = {
## 四階段實作計畫
| Phase | 內容 | 估時 | 優先級 |
|-------|------|------|--------|
| 1 | UnitOfWork + IncidentApprovalService | 3-4h | P0 |
| 2 | 狀態同步 Hook + TTL 延長 | 2-3h | P0 |
| 3 | 分散式鎖 + TTL 同步 | 2-3h | P1 |
| 4 | 整合測試 | 2h | P1 |
| Phase | 內容 | 估時 | 狀態 |
|-------|------|------|------|
| 1 | UnitOfWork + IncidentApprovalService | 3-4h | ✅ 完成 |
| 2 | 狀態同步 Hook + TTL 延長 | 2-3h | ✅ 完成 |
| 3 | 分散式鎖 + TTL 同步 | 2-3h | 🔲 待做 |
| 4 | 整合測試 | 2h | 🔲 待做 |
### 實作完成檔案 (2026-03-26)
| 檔案 | 功能 | 行數 |
|------|------|------|
| `apps/api/src/core/constants.py` | TTL + Redis Key 常量 | 38 |
| `apps/api/src/core/unit_of_work.py` | PostgreSQL 事務管理 | 138 |
| `apps/api/src/services/incident_approval_service.py` | 原子同步服務 | 470 |
### Router 整合點
| 端點 | 整合方式 |
|------|----------|
| `POST /approvals/{id}/sign` | `on_approval_status_change("approved")` |
| `POST /approvals/{id}/reject` | `on_approval_status_change("rejected")` |
| `POST /approvals/bulk-approve` | `on_approval_status_change("approved")` |
**總估時**: 9-12h