2026-06-13 23:27:12 +08:00
|
|
|
from datetime import datetime
|
|
|
|
|
from typing import Literal
|
|
|
|
|
|
2026-06-16 17:03:18 +08:00
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
2026-06-13 23:27:12 +08:00
|
|
|
|
2026-06-20 06:56:17 +08:00
|
|
|
SystemMessageType = Literal["info", "warning", "error", "success"]
|
|
|
|
|
|
2026-06-13 23:27:12 +08:00
|
|
|
|
|
|
|
|
class SystemMessagePublic(BaseModel):
|
2026-06-16 17:03:18 +08:00
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
|
|
2026-06-13 23:27:12 +08:00
|
|
|
id: str
|
|
|
|
|
title: str
|
|
|
|
|
content: str
|
2026-06-20 06:56:17 +08:00
|
|
|
message_type: SystemMessageType
|
2026-06-13 23:27:12 +08:00
|
|
|
target_user_id: str | None
|
|
|
|
|
is_read: bool
|
|
|
|
|
created_at: datetime
|
|
|
|
|
read_at: datetime | None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SystemMessageListResponse(BaseModel):
|
|
|
|
|
items: list[SystemMessagePublic]
|
|
|
|
|
total: int
|
|
|
|
|
unread_count: int
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SystemMessageCreateRequest(BaseModel):
|
|
|
|
|
title: str = Field(min_length=1, max_length=255)
|
|
|
|
|
content: str = Field(min_length=1)
|
2026-06-20 06:56:17 +08:00
|
|
|
message_type: SystemMessageType = Field(default="info")
|
2026-06-13 23:27:12 +08:00
|
|
|
target_user_id: str | None = Field(default=None, description="发送给特定用户,为空则全员广播")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SystemMessageMarkReadRequest(BaseModel):
|
|
|
|
|
message_ids: list[str] = Field(min_length=1, description="要标记为已读的消息ID列表")
|