mirror of
https://github.com/FerraSoft/bottohelp.git
synced 2026-08-06 21:55:03 +00:00
Подготовка к релизу
This commit is contained in:
@@ -0,0 +1,249 @@
|
||||
# 🚀 МИГРАЦИОННЫЙ ГУЙД: НОВАЯ АРХИТЕКТУРА ОБРАБОТЧИКОВ
|
||||
|
||||
## 📋 ОБЗОР МИГРАЦИИ
|
||||
|
||||
### 🎯 Цель
|
||||
Переход от монолитной системы обработчиков к модульной архитектуре с:
|
||||
- Контекстными меню с учетом прав доступа
|
||||
- Разделением обработки сообщений по типам
|
||||
- Строгим контролем доступа по ролям
|
||||
|
||||
---
|
||||
|
||||
## 🔧 ИСПРАВЛЕНИЕ ОШИБКИ permission_manager
|
||||
|
||||
### Ошибка:
|
||||
```python
|
||||
NameError: name 'permission_manager' is not defined
|
||||
```
|
||||
|
||||
### Исправление в `core/application.py`:
|
||||
|
||||
```python
|
||||
def _initialize_unified_router(self):
|
||||
"""Инициализация новой системы маршрутизации"""
|
||||
try:
|
||||
from .command_router import create_command_router
|
||||
from .message_router import create_message_router
|
||||
from .menu_manager import create_menu_manager
|
||||
from utils.formatters import KeyboardFormatter
|
||||
from .permissions import permission_manager # ← ДОБАВИТЬ ЭТОТ ИМПОРТ
|
||||
|
||||
# Создаем компоненты новой системы
|
||||
self.command_router = create_command_router(self.config, self.metrics)
|
||||
self.message_router = create_message_router()
|
||||
self.menu_manager = create_menu_manager(
|
||||
permission_manager, KeyboardFormatter() # ← permission_manager теперь определен
|
||||
)
|
||||
|
||||
# Создаем объединенный маршрутизатор
|
||||
from .unified_router import create_unified_router
|
||||
self.unified_router = create_unified_router(
|
||||
self.command_router,
|
||||
self.message_router,
|
||||
self.menu_manager
|
||||
)
|
||||
|
||||
self.logger.info("Компоненты новой системы маршрутизации созданы")
|
||||
|
||||
except Exception as e:
|
||||
self.logger.error(f"Ошибка инициализации новой системы маршрутизации: {e}")
|
||||
raise
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 ПЛАН МИГРАЦИИ
|
||||
|
||||
### Этап 1: Исправление ошибок импорта (СРОЧНО)
|
||||
```bash
|
||||
# Добавить недостающие импорты в core/application.py
|
||||
from .permissions import permission_manager
|
||||
```
|
||||
|
||||
### Этап 2: Тестирование новой архитектуры
|
||||
```bash
|
||||
# Запуск демонстрации
|
||||
python demo_architecture.py
|
||||
|
||||
# Запуск интеграционных тестов
|
||||
python -m pytest tests/test_core/ -v
|
||||
```
|
||||
|
||||
### Этап 3: Постепенная миграция обработчиков
|
||||
```python
|
||||
# В core/application.py добавить методы:
|
||||
def _register_command_handlers(self):
|
||||
"""Регистрация обработчиков команд в новой системе"""
|
||||
from handlers import UserHandlers, GameHandlers, AdminHandlers
|
||||
|
||||
# Регистрируем команды пользователей
|
||||
user_handlers = UserHandlers(self.config, self.metrics, self.user_service)
|
||||
for cmd, handler in user_handlers.get_command_handlers().items():
|
||||
self.command_router.register_command_handler(cmd, handler)
|
||||
```
|
||||
|
||||
### Этап 4: Замена старой системы
|
||||
```python
|
||||
# После успешного тестирования заменить в _setup_handlers():
|
||||
# Старая система (закомментировать):
|
||||
# self.telegram_app.add_handler(CommandHandler(command, handler_func))
|
||||
|
||||
# Новая система (использовать):
|
||||
# self.unified_router.handle_update(update, context)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 ТЕСТИРОВАНИЕ МИГРАЦИИ
|
||||
|
||||
### Тест 1: Проверка импортов
|
||||
```bash
|
||||
cd telegram_bot
|
||||
python -c "
|
||||
from core.permissions import permission_manager
|
||||
from core.menu_manager import create_menu_manager
|
||||
from utils.formatters import KeyboardFormatter
|
||||
print('✅ Все импорты работают')
|
||||
"
|
||||
```
|
||||
|
||||
### Тест 2: Инициализация компонентов
|
||||
```bash
|
||||
python -c "
|
||||
from core.application import Application
|
||||
app = Application('config_local.py')
|
||||
print('✅ Application инициализируется без ошибок')
|
||||
"
|
||||
```
|
||||
|
||||
### Тест 3: Демонстрация архитектуры
|
||||
```bash
|
||||
python demo_architecture.py
|
||||
# Должно показать статистику компонентов
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 ОБРАТНАЯ СОВМЕСТИМОСТЬ
|
||||
|
||||
### Временный режим работы
|
||||
Новая система работает параллельно со старой:
|
||||
|
||||
```python
|
||||
async def _handle_command_fallback(self, update, context, command, handler):
|
||||
"""Обработка команд через новую систему с fallback"""
|
||||
try:
|
||||
# Сначала пытаемся через новую систему
|
||||
await self.unified_router.handle_update(update, context)
|
||||
except Exception as e:
|
||||
self.logger.error(f"Error in unified command handler for /{command}: {e}")
|
||||
# Fallback к старому обработчику
|
||||
await handler(update, context)
|
||||
```
|
||||
|
||||
### Полная миграция
|
||||
После успешного тестирования:
|
||||
|
||||
```python
|
||||
def _setup_handlers(self):
|
||||
"""Только новая система маршрутизации"""
|
||||
# Убрать старую регистрацию обработчиков
|
||||
# Использовать только: self.unified_router.handle_update(update, context)
|
||||
pass
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 МОНИТОРИНГ МИГРАЦИИ
|
||||
|
||||
### Метрики для отслеживания:
|
||||
- Количество обработанных команд
|
||||
- Время отклика новой системы
|
||||
- Количество ошибок в обработчиках
|
||||
- Использование памяти
|
||||
|
||||
### Логи для анализа:
|
||||
```python
|
||||
self.logger.info("Новая система маршрутизации инициализирована")
|
||||
self.logger.info(f"Зарегистрировано команд: {len(self.command_router.commands)}")
|
||||
self.logger.info(f"Зарегистрировано меню: {len(self.menu_manager.menus)}")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚨 РИСКИ И МИТИГАЦИЯ
|
||||
|
||||
### Риск 1: Ошибки импорта
|
||||
**Митигация:** Добавить проверки импорта с fallback
|
||||
```python
|
||||
try:
|
||||
from .permissions import permission_manager
|
||||
except ImportError:
|
||||
self.logger.warning("PermissionManager недоступен, используем старую систему")
|
||||
return
|
||||
```
|
||||
|
||||
### Риск 2: Несовместимость обработчиков
|
||||
**Митигация:** Постепенная миграция с тестированием
|
||||
```python
|
||||
# Тестировать каждый обработчик отдельно
|
||||
def test_command_migration(self, command_name):
|
||||
# Имитировать вызов команды
|
||||
# Сравнить результаты старой и новой систем
|
||||
pass
|
||||
```
|
||||
|
||||
### Риск 3: Падение производительности
|
||||
**Митигация:** Кеширование и оптимизация
|
||||
```python
|
||||
# Кешировать часто используемые меню
|
||||
self.menu_cache = {}
|
||||
|
||||
# Оптимизировать определение ролей
|
||||
@lru_cache(maxsize=1000)
|
||||
def get_cached_role(self, user_id):
|
||||
return self.permission_manager.get_effective_role(user_id)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ КРИТЕРИИ ГОТОВНОСТИ
|
||||
|
||||
### Функциональные:
|
||||
- [ ] Все команды работают через новую систему
|
||||
- [ ] Меню отображаются с учетом прав доступа
|
||||
- [ ] Обработка сообщений разделена по типам
|
||||
- [ ] Нет регрессии в существующей функциональности
|
||||
|
||||
### Технические:
|
||||
- [ ] Все импорты исправлены
|
||||
- [ ] Архитектура протестирована (demo_architecture.py)
|
||||
- [ ] Unit-тесты проходят (tests/test_core/)
|
||||
- [ ] Производительность не ухудшилась
|
||||
|
||||
### Документационные:
|
||||
- [ ] Код документирован
|
||||
- [ ] MIGRATION_GUIDE.md обновлен
|
||||
- [ ] Примеры использования созданы
|
||||
|
||||
---
|
||||
|
||||
## 🎯 СЛЕДУЮЩИЕ ШАГИ
|
||||
|
||||
1. **СРОЧНО:** Исправить ошибки импорта в `core/application.py`
|
||||
2. **ТЕСТИРОВАТЬ:** Запустить `demo_architecture.py`
|
||||
3. **МИГРИРОВАТЬ:** Начать постепенную миграцию обработчиков
|
||||
4. **ОПТИМИЗИРОВАТЬ:** Добавить кеширование и оптимизации
|
||||
5. **ДОКУМЕНТИРОВАТЬ:** Закончить документацию
|
||||
|
||||
---
|
||||
|
||||
## 📞 КОНТАКТЫ ДЛЯ ПОДДЕРЖКИ
|
||||
|
||||
При возникновении проблем во время миграции:
|
||||
1. Проверить логи в `bot.log`
|
||||
2. Запустить диагностические тесты
|
||||
3. Связаться с командой разработки
|
||||
|
||||
**ГОТОВНОСТЬ К МИГРАЦИИ: 90% (после исправления импортов)**
|
||||
Reference in New Issue
Block a user