Files
bottohelp/MIGRATION_GUIDE.md
T

249 lines
9.2 KiB
Markdown
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.
# 🚀 МИГРАЦИОННЫЙ ГУЙД: НОВАЯ АРХИТЕКТУРА ОБРАБОТЧИКОВ
## 📋 ОБЗОР МИГРАЦИИ
### 🎯 Цель
Переход от монолитной системы обработчиков к модульной архитектуре с:
- Контекстными меню с учетом прав доступа
- Разделением обработки сообщений по типам
- Строгим контролем доступа по ролям
---
## 🔧 ИСПРАВЛЕНИЕ ОШИБКИ 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% (после исправления импортов)**