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