diff --git a/apps/api/src/models/approval.py b/apps/api/src/models/approval.py index 8a37abc5..182cf4b6 100644 --- a/apps/api/src/models/approval.py +++ b/apps/api/src/models/approval.py @@ -10,7 +10,7 @@ Features: - Pydantic 強型別驗證 """ -from datetime import UTC, datetime +from datetime import datetime, timezone from enum import Enum from uuid import UUID, uuid4 @@ -106,7 +106,7 @@ class Signature(BaseModel): id: UUID = Field(default_factory=uuid4) signer_id: str = Field(..., description="簽核者 ID") signer_name: str = Field(..., description="簽核者名稱") - signed_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) + signed_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) comment: str | None = None # Phase 5.4.5: Telegram 審計軌跡 @@ -153,14 +153,14 @@ class ApprovalRequest(ApprovalRequestBase): status: ApprovalStatus = Field(default=ApprovalStatus.PENDING) required_signatures: int = Field(..., description="所需簽核數") signatures: list[Signature] = Field(default_factory=list) - created_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) - updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) + created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) + updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) resolved_at: datetime | None = Field(default=None, description="解決時間") rejection_reason: str | None = Field(default=None) # 戰略 B: 告警風暴收斂 fingerprint: str | None = Field(default=None, description="告警指紋 Hash") hit_count: int = Field(default=1, description="聚合觸發次數") - last_seen_at: datetime = Field(default_factory=lambda: datetime.now(UTC), description="最後觸發時間") + last_seen_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), description="最後觸發時間") # 2026-04-06 ogt: 關聯 Incident — 萃取 Playbook 與 KM 寫入必須知道 incident_id incident_id: str | None = Field(default=None, description="關聯的 Incident ID")