fix:[FL-143][处理消息查看报错]
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
from datetime import datetime
|
||||
from typing import Literal
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
|
||||
class SystemMessagePublic(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
id: str
|
||||
title: str
|
||||
content: str
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from types import SimpleNamespace
|
||||
|
||||
from app.schemas.system_message import SystemMessagePublic
|
||||
|
||||
|
||||
def test_system_message_public_validates_attribute_object() -> None:
|
||||
message = SimpleNamespace(
|
||||
id="message-1",
|
||||
title="系统通知",
|
||||
content="测试内容",
|
||||
message_type="info",
|
||||
target_user_id=None,
|
||||
is_read=False,
|
||||
created_at=datetime(2026, 1, 1, 12, 0, 0),
|
||||
read_at=None,
|
||||
)
|
||||
|
||||
result = SystemMessagePublic.model_validate(message)
|
||||
|
||||
assert result.id == "message-1"
|
||||
assert result.title == "系统通知"
|
||||
assert result.is_read is False
|
||||
@@ -0,0 +1,16 @@
|
||||
# Work Log - 修复系统消息查看 500(2026-06-16)
|
||||
|
||||
- 背景:
|
||||
- `/api/v1/system-messages/me` 返回系统消息列表时,对 SQLAlchemy ORM 对象执行 `SystemMessagePublic.model_validate()`,Pydantic v2 未启用属性读取,导致 500。
|
||||
|
||||
- 本次处理:
|
||||
- 为 `SystemMessagePublic` 增加 `ConfigDict(from_attributes=True)`,允许响应 schema 从 ORM/属性对象读取字段。
|
||||
- 新增系统消息 schema 回归测试,覆盖属性对象序列化路径。
|
||||
|
||||
- 验证:
|
||||
- 基线:未启用 `from_attributes` 时,属性对象 `model_validate` 复现 Pydantic `model_type` 校验失败。
|
||||
- 修改后:属性对象 `model_validate` 可正常输出。
|
||||
- `pytest api/tests/test_system_message_schema.py` 通过。
|
||||
|
||||
- 风险与关注点:
|
||||
- 改动仅影响系统消息公开响应 schema 的序列化方式,不改变接口字段、数据库结构或查询逻辑。
|
||||
Reference in New Issue
Block a user