91 lines
1.8 KiB
Python
91 lines
1.8 KiB
Python
# -*- coding = utf-8 -*-
|
|
# @Time : 2025/3/8 下午10:54
|
|
# @File : schema.py
|
|
# @Software : PyCharm
|
|
# @Author : xingc
|
|
# @Desc :
|
|
from typing import Literal, Optional, List
|
|
|
|
from pydantic import BaseModel, UUID4
|
|
|
|
from core.base.schema import MessageType, Paginated
|
|
from core.routers.user.schema import LiteUser
|
|
|
|
|
|
class ChatUser(LiteUser):
|
|
pass
|
|
|
|
|
|
class Chat(BaseModel):
|
|
chat_guid: UUID4
|
|
friend_user: LiteUser
|
|
|
|
|
|
class ChatCreateIn(BaseModel):
|
|
recipient_user_id: int
|
|
|
|
|
|
class PreviewMessage(BaseModel):
|
|
id: int
|
|
message_type: MessageType
|
|
content: str
|
|
|
|
|
|
class ChatPaginated(Paginated):
|
|
unread_messages_total: int
|
|
|
|
|
|
class MakeMessageRead(BaseModel):
|
|
chat_guid: UUID4
|
|
last_read_message_id: int
|
|
|
|
|
|
class MakeMessageReadIn(BaseModel):
|
|
chats: List[MakeMessageRead]
|
|
|
|
|
|
class ChatUnreadOut(BaseModel):
|
|
chat_guid: UUID4
|
|
created_at: str
|
|
updated_at: str
|
|
recipient_user: LiteUser
|
|
is_deleted: bool = False
|
|
last_message: PreviewMessage | None
|
|
unread_messages_count: int
|
|
|
|
|
|
class MessageOut(BaseModel):
|
|
chat_id: int
|
|
chat_guid: UUID4
|
|
id: int
|
|
message_guid: UUID4
|
|
message_type: MessageType
|
|
content: str
|
|
user: LiteUser
|
|
created_at: str
|
|
updated_at: str
|
|
|
|
|
|
class WSMessage(BaseModel):
|
|
type: Literal[
|
|
'chat.new_message', 'chat.message_read', 'chat.ping'
|
|
]
|
|
message_guid: UUID4
|
|
message_type: MessageType
|
|
chat_guid: UUID4
|
|
receive_user: Optional[int] = None
|
|
content: str
|
|
|
|
|
|
class WSMessageOut(BaseModel):
|
|
type: Literal[
|
|
'chat.new_message', 'chat.send_status_reply',
|
|
]
|
|
status: Optional[Literal['ok', 'error']] = 'ok'
|
|
message_id: int
|
|
message_guid: UUID4
|
|
message_type: MessageType
|
|
chat_guid: UUID4
|
|
content: Optional[str] = None
|
|
friend_user: Optional[LiteUser] = None
|