import pydantic class UserAgentModel(pydantic.BaseModel): deviceType: str appVersion: str osVersion: str timezone: str release: int = None screen: str pushDeviceType: str = None arch: str = None locale: str buildNumber: int = None deviceName: str deviceLocale: str class HelloPayloadModel(pydantic.BaseModel): clientSessionId: int = None mt_instanceid: str = None userAgent: UserAgentModel deviceId: str class RequestCodePayloadModel(pydantic.BaseModel): phone: str type: str @pydantic.field_validator('phone') def validate_phone(cls, v): """Валидация номера телефона""" if not v.replace("+", "").replace(" ", "").replace("-", "").isdigit(): raise ValueError('phone must be digits') return v @pydantic.field_validator('type') def validate_type(cls, v): """Валидация типа запроса""" if not v in ("START_AUTH", "RESEND"): raise ValueError('type must be valid') return v class VerifyCodePayloadModel(pydantic.BaseModel): verifyCode: str authTokenType: str token: str class LoginPayloadModel(pydantic.BaseModel): interactive: bool token: str class PingPayloadModel(pydantic.BaseModel): interactive: bool = None class AssetsPayloadModel(pydantic.BaseModel): sync: int type: str class GetCallHistoryPayloadModel(pydantic.BaseModel): forward: bool count: int class MessageModel(pydantic.BaseModel): isLive: bool = None detectShare: bool = None elements: list = None attaches: list = None cid: int = None text: str = None class SendMessagePayloadModel(pydantic.BaseModel): # TODO: пишем сервер макса в 2 ночи и не понимаем как это валидировать (блять) userId: int = None chatId: int = None message: MessageModel class SyncFoldersPayloadModel(pydantic.BaseModel): folderSync: int class CreateFolderPayloadModel(pydantic.BaseModel): id: str title: str filters: list = [] include: list = [] class SearchChatsPayloadModel(pydantic.BaseModel): chatIds: list class SearchByPhonePayloadModel(pydantic.BaseModel): phone: str class GetCallTokenPayloadModel(pydantic.BaseModel): userId: int value: str class TypingPayloadModel(pydantic.BaseModel): chatId: int type: str = None class SearchUsersPayloadModel(pydantic.BaseModel): contactIds: list class ComplainReasonsGetPayloadModel(pydantic.BaseModel): complainSync: int class UpdateProfilePayloadModel(pydantic.BaseModel): description: str = None firstName: str = None lastName: str = None class AuthConfirmRegisterPayloadModel(pydantic.BaseModel): token: str firstName: str lastName: str = None tokenType: str @pydantic.field_validator('firstName') def validate_first_name(cls, v): v = v.strip() if not v: raise ValueError('firstName must not be empty') if len(v) > 59: raise ValueError('firstName too long') return v @pydantic.field_validator('lastName') def validate_last_name(cls, v): if v is None: return v v = v.strip() if len(v) > 59: raise ValueError('lastName too long') return v class ChatHistoryPayloadModel(pydantic.BaseModel): chatId: int backward: int class ChatSubscribePayloadModel(pydantic.BaseModel): chatId: int subscribe: bool class ContactListPayloadModel(pydantic.BaseModel): status: str count: int = None class ContactPresencePayloadModel(pydantic.BaseModel): contactIds: list class ContactUpdatePayloadModel(pydantic.BaseModel): action: str contactId: int firstName: str lastName: str = None