from datetime import datetime from typing import Optional from schemas.base import BaseSchema, OkMessageSchema from schemas.user import UserSchema # region Entities class TgUserSchema(BaseSchema): id: int first_name: Optional[str] last_name: Optional[str] username: Optional[str] class MessageFileSchema(BaseSchema): id: int file_path: str type: str file_name: str file_size: int class BaseMessageSchema(BaseSchema): text: str chat_id: int class EditMessageSchema(BaseMessageSchema): id: int class MessageSchema(EditMessageSchema): created_at: datetime tg_sender: Optional[TgUserSchema] crm_sender: Optional[UserSchema] status: str is_edited: bool file: Optional[MessageFileSchema] = None class RepeatSendingMessageSchema(BaseMessageSchema): text: str id: int class TgGroupSchema(BaseSchema): tg_group_id: int tg_invite_link: str class ChatSchema(BaseSchema): id: int client_id: Optional[int] card_id: Optional[int] tg_group: Optional[TgGroupSchema] class ChatsListItemSchema(ChatSchema): name: str # endregion # region Requests class SendTextMessageRequest(BaseSchema): message: BaseMessageSchema class RepeatSendingTextMessageRequest(BaseSchema): message: RepeatSendingMessageSchema class EditMessageRequest(BaseSchema): message: EditMessageSchema class GetChatRequest(BaseSchema): client_id: int card_id: Optional[int] class CreateChatRequest(BaseSchema): client_id: int card_id: Optional[int] class GetMessagesRequest(BaseSchema): chat_id: int offset: int limit: int # endregion # region Responses class GetChatsListResponse(BaseSchema): chats: list[ChatsListItemSchema] class SendTextMessageResponse(OkMessageSchema): pass class RepeatSendingTextMessageResponse(OkMessageSchema): pass class LoadMessagesResponse(OkMessageSchema): pass class DeleteMessageResponse(OkMessageSchema): pass class EditMessageResponse(OkMessageSchema): pass class GetChatResponse(BaseSchema): chat: Optional[ChatSchema] class CreateChatResponse(OkMessageSchema): pass class GetMessagesResponse(BaseSchema): messages: list[MessageSchema] # endregion