""" Модели данных для управления группами мессенджеров. Автор: Сергей Антропов Сайт: https://devops.org.ru """ from typing import Optional, Dict, Any, Union from pydantic import BaseModel, Field class GroupInfo(BaseModel): """Информация о группе.""" name: str = Field(..., description="Имя группы", examples=["monitoring", "alerts", "devops"]) messenger: Optional[str] = Field(None, description="Тип мессенджера (telegram, max)", examples=["telegram", "max"]) chat_id: Optional[Union[int, str]] = Field(None, description="Chat ID группы (отображается только при наличии пароля)", examples=[-1001234567890, "123456789", None]) thread_id: Optional[int] = Field(None, description="ID треда в группе (опционально, только для Telegram)", examples=[0, 123, 456]) model_config = { "json_schema_extra": { "examples": [ { "name": "monitoring", "messenger": "telegram", "chat_id": -1001234567890, "thread_id": 0 }, { "name": "alerts_max", "messenger": "max", "chat_id": "123456789", "thread_id": None }, { "name": "devops", "messenger": None, "chat_id": None, "thread_id": None } ] } } class CreateGroupRequest(BaseModel): """Запрос на создание группы.""" group_name: str = Field(..., description="Имя группы", examples=["monitoring", "alerts", "devops"]) chat_id: Union[int, str] = Field(..., description="ID чата (может быть int для Telegram или str для MAX/VK)", examples=[-1001234567890, "123456789"]) messenger: str = Field("telegram", description="Тип мессенджера (telegram, max)", examples=["telegram", "max"]) thread_id: int = Field(0, description="ID треда в группе (по умолчанию 0, только для Telegram)", examples=[0, 123, 456]) config: Optional[Dict[str, Any]] = Field(None, description="Дополнительная конфигурация для мессенджера (опционально)", examples=[None, {"access_token": "..."}, {"api_version": "5.131"}]) model_config = { "json_schema_extra": { "examples": [ { "group_name": "monitoring", "chat_id": -1001234567890, "messenger": "telegram", "thread_id": 0, }, { "group_name": "alerts_max", "chat_id": "123456789", "messenger": "max", "thread_id": 0, "config": { "access_token": "your_access_token", "api_version": "5.131" } } ] } } class UpdateGroupRequest(BaseModel): """Запрос на обновление группы.""" chat_id: Optional[Union[int, str]] = Field(None, description="Новый Chat ID группы (можно получить через @userinfobot для Telegram)", examples=[-1001234567891, "123456789"]) messenger: Optional[str] = Field(None, description="Новый тип мессенджера (telegram, max)", examples=["telegram", "max"]) thread_id: Optional[int] = Field(None, description="Новый ID треда в группе (опционально, только для Telegram)", examples=[0, 123, 456]) config: Optional[Dict[str, Any]] = Field(None, description="Новая дополнительная конфигурация для мессенджера (опционально)", examples=[None, {"access_token": "..."}, {"api_version": "5.131"}]) model_config = { "json_schema_extra": { "examples": [ { "chat_id": -1001234567891, "messenger": "telegram", "thread_id": 0, }, { "chat_id": "123456789", "messenger": "max", "config": { "access_token": "your_access_token", "api_version": "5.131" } } ] } } class DeleteGroupRequest(BaseModel): """Запрос на удаление группы.""" pass