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