diff --git a/apps/api/src/models/incident.py b/apps/api/src/models/incident.py index 8acfe69a..98352400 100644 --- a/apps/api/src/models/incident.py +++ b/apps/api/src/models/incident.py @@ -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)