Files
bottohelp/MIGRATION_GUIDE.md

9.2 KiB
Raw Permalink Blame History

🚀 МИГРАЦИОННЫЙ ГУЙД: НОВАЯ АРХИТЕКТУРА ОБРАБОТЧИКОВ

📋 ОБЗОР МИГРАЦИИ

🎯 Цель

Переход от монолитной системы обработчиков к модульной архитектуре с:

  • Контекстными меню с учетом прав доступа
  • Разделением обработки сообщений по типам
  • Строгим контролем доступа по ролям

🔧 ИСПРАВЛЕНИЕ ОШИБКИ permission_manager

Ошибка:

NameError: name 'permission_manager' is not defined

Исправление в core/application.py:

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: Исправление ошибок импорта (СРОЧНО)

# Добавить недостающие импорты в core/application.py
from .permissions import permission_manager

Этап 2: Тестирование новой архитектуры

# Запуск демонстрации
python demo_architecture.py

# Запуск интеграционных тестов
python -m pytest tests/test_core/ -v

Этап 3: Постепенная миграция обработчиков

# В 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: Замена старой системы

# После успешного тестирования заменить в _setup_handlers():
# Старая система (закомментировать):
# self.telegram_app.add_handler(CommandHandler(command, handler_func))

# Новая система (использовать):
# self.unified_router.handle_update(update, context)

🧪 ТЕСТИРОВАНИЕ МИГРАЦИИ

Тест 1: Проверка импортов

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: Инициализация компонентов

python -c "
from core.application import Application
app = Application('config_local.py')
print('✅ Application инициализируется без ошибок')
"

Тест 3: Демонстрация архитектуры

python demo_architecture.py
# Должно показать статистику компонентов

🔄 ОБРАТНАЯ СОВМЕСТИМОСТЬ

Временный режим работы

Новая система работает параллельно со старой:

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)

Полная миграция

После успешного тестирования:

def _setup_handlers(self):
    """Только новая система маршрутизации"""
    # Убрать старую регистрацию обработчиков
    # Использовать только: self.unified_router.handle_update(update, context)
    pass

📊 МОНИТОРИНГ МИГРАЦИИ

Метрики для отслеживания:

  • Количество обработанных команд
  • Время отклика новой системы
  • Количество ошибок в обработчиках
  • Использование памяти

Логи для анализа:

self.logger.info("Новая система маршрутизации инициализирована")
self.logger.info(f"Зарегистрировано команд: {len(self.command_router.commands)}")
self.logger.info(f"Зарегистрировано меню: {len(self.menu_manager.menus)}")

🚨 РИСКИ И МИТИГАЦИЯ

Риск 1: Ошибки импорта

Митигация: Добавить проверки импорта с fallback

try:
    from .permissions import permission_manager
except ImportError:
    self.logger.warning("PermissionManager недоступен, используем старую систему")
    return

Риск 2: Несовместимость обработчиков

Митигация: Постепенная миграция с тестированием

# Тестировать каждый обработчик отдельно
def test_command_migration(self, command_name):
    # Имитировать вызов команды
    # Сравнить результаты старой и новой систем
    pass

Риск 3: Падение производительности

Митигация: Кеширование и оптимизация

# Кешировать часто используемые меню
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% (после исправления импортов)