Files
MessageGateway/app/models/group.py
Sergey Antropov b90def35ed Initial commit: Message Gateway project
- FastAPI приложение для отправки мониторинговых алертов в мессенджеры
- Поддержка Telegram и MAX/VK
- Интеграция с Grafana, Zabbix, AlertManager
- Автоматическое создание тикетов в Jira
- Управление группами мессенджеров через API
- Декораторы для авторизации и скрытия эндпоинтов
- Подробная документация в папке docs/

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-11-12 20:25:11 +03:00

107 lines
4.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Модели данных для управления группами мессенджеров.
Автор: Сергей Антропов
Сайт: 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