desktop_app/app/core/models/chat_models.py
2025-09-29 02:53:52 +03:00

78 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from uuid import UUID
from datetime import datetime
from pydantic import BaseModel, Field
from typing import Optional, Literal, List, Any, Dict
class MessageForward(BaseModel):
forward_type: Optional[Literal["chat_private_messages", "chat_group_messages",
"chat_public_messages", "reply"]] = Field(None, description="Тип пересылаемого контента")
forward_sender_id: Optional[UUID] = Field(None, description="ID чата, откуда переслано сообщение")
forward_message_id: Optional[int] = Field(None, description="Данные внутренний ид сообщения в forward_chat")
forward_chat_data: Optional[Any] = Field(default=None, description="Данные о чате пересылаемом (беседы и паблики)")
class MessageItem(BaseModel):
message_id: int = Field(..., description="внутренний ID сообщения")
message_type: List[Literal["text", "media", "circle", "voice", "system", "forward",
"reply", "poll"]] = Field(..., alias="message_type", description="Типы сообщения")
forward_metadata: Optional[MessageForward]
chat_id: UUID = Field(..., description="Чат ID")
sender_id: UUID = Field(..., description="Кто отправил")
sender_data: Optional[Any] = Field(default=None, description="Данные о пользователе")
content: Optional[str] = Field(None, description="Текст сообщения")
media_link: Optional[Any] = Field(None, description="Ссылка на медиа (заглушка)")
is_viewed: bool = Field(..., description="Флаг просмотра")
created_at: datetime = Field(..., description="Дата и время создания сообщения")
updated_at: Optional[datetime] = Field(None, description="Дата и время обновления сообщения")
class PrivateChatListItem(BaseModel):
chat_id: UUID = Field(..., description="ID чата")
chat_type: Literal["self", "private"] = Field(..., description="Тип чата")
chat_data: Optional[Dict[str, Any]] = Field(default=None, description="Данные о чате")
last_message: Optional[MessageItem] = Field(None, description="Последнее сообщение в чате")
created_at: datetime = Field(..., description="Дата создания чата")
class PrivateChatListData(BaseModel):
items: List[PrivateChatListItem]
has_more: bool
class PrivateChatListResponse(BaseModel):
status: str
data: PrivateChatListData
# history
class PrivateChatHistoryData(BaseModel):
items: List[MessageItem]
has_more: bool
class PrivateChatHistoryResponse(BaseModel):
status: str
data: PrivateChatHistoryData
# send
class PrivateMessageSendRequest(BaseModel):
chat_id: UUID
content: Optional[str] = Field(None, description="Содержимое сообщения (макс. 4096 символов)", max_length=4096)
message_type: List[Literal["text"]] = Field(
..., description="Один или несколько типов сообщения"
)
class PrivateMessageSendData(BaseModel):
message_id: int
chat_id: UUID
created_at: datetime
class PrivateMessageSendResponse(BaseModel):
status: str
data: PrivateMessageSendData