feat(database): 将 Event.event_payload 字段从 str 改为 dict/json

- 在 events.py 中,将 event_payload 字段的类型从 str 改为 dict,并使用 JSON 类型存储
- 添加新的迁移文件,将数据库中的 event_payload 列从 VARCHAR 类型改为 JSON 类型
- 更新 EventResp 类,移除 _payload 属性,直接使用 event_payload 字段
This commit is contained in:
chenjintang-shrimp
2025-08-13 06:21:22 +00:00
parent 29eb85bc4a
commit 1dde8a40da
2 changed files with 144 additions and 11 deletions

View File

@@ -1,9 +1,9 @@
from datetime import UTC, datetime
from enum import Enum
import json
from typing import TYPE_CHECKING
from sqlmodel import (
JSON,
BigInteger,
Column,
DateTime,
@@ -40,7 +40,9 @@ class EventBase(SQLModel):
sa_column=Column(DateTime(timezone=True), default=datetime.now(UTC))
)
type: EventType
event_payload: str
event_payload: dict = Field(
exclude=True, default_factory=dict, sa_column=Column(JSON)
)
class Event(EventBase, table=True):
@@ -53,15 +55,9 @@ class Event(EventBase, table=True):
class EventResp(EventBase):
_payload: dict
def merge_payload(self) -> "EventResp":
parsed = {}
try:
parsed = json.loads(self.event_payload or "{}")
except json.JSONDecodeError:
parsed = {}
for key, value in parsed.items():
for key, value in self.event_payload.items():
setattr(self, key, value)
self._payload = parsed
return self
pass