# -*- coding = utf-8 -*- # @Time : 2025/3/8 下午10:54 # @File : schema.py # @Software : PyCharm # @Author : xingc # @Desc : from datetime import datetime from typing import Literal, Optional, List from pydantic import BaseModel, conint, UUID4 from core.base.schema import MessageType 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 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