fix(model): IncidentOutcome 舊 Redis 字串格式相容性
Some checks failed
CD Pipeline (Dev) / build-and-deploy-dev (push) Successful in 2m38s
CD Pipeline / build-and-deploy (push) Has been cancelled
E2E Health Check / e2e-health (push) Has been cancelled
Type Sync Check / check-type-sync (push) Failing after 22s

舊事件 outcome 存為字串 "resolved",Pydantic v2 無法解析
→ INTERNAL_ERROR on /auto-repair/evaluate/{incident_id}

field_validator mode='before' 將字串轉為 None (安全丟棄)
確保舊資料不引發 incident_parse_error

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-04-01 18:03:21 +08:00
parent 71a4e0f8c8
commit 43a370fc11

View File

@@ -25,7 +25,7 @@ from enum import Enum
from typing import Literal
from uuid import UUID, uuid4
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, field_validator
# 復用現有模型 (避免重複定義)
from src.models.approval import BlastRadius
@@ -419,6 +419,14 @@ class Incident(BaseModel):
# [首席架構師] 移除 json_encoders (Pydantic v2 已 deprecated),原生序列化輸出格式與 .isoformat() 一致 v1.1 2026-04-01 Asia/Taipei
# 2026-04-01 Claude Code: 舊 Redis 資料相容性 - outcome 可能存為字串 "resolved"
@field_validator("outcome", mode="before")
@classmethod
def coerce_outcome_string(cls, v: object) -> object:
if isinstance(v, str):
return None # 舊格式字串無法還原為 IncidentOutcome捨棄即可
return v
# =============================================================================
# DTOs (Data Transfer Objects)