58 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
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 |