fix(model): IncidentOutcome 舊 Redis 字串格式相容性
舊事件 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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user