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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user