mirror of
https://github.com/FerraSoft/bottohelp.git
synced 2026-08-06 21:55:03 +00:00
9.2 KiB
9.2 KiB
🚀 МИГРАЦИОННЫЙ ГУЙД: НОВАЯ АРХИТЕКТУРА ОБРАБОТЧИКОВ
📋 ОБЗОР МИГРАЦИИ
🎯 Цель
Переход от монолитной системы обработчиков к модульной архитектуре с:
- Контекстными меню с учетом прав доступа
- Разделением обработки сообщений по типам
- Строгим контролем доступа по ролям
🔧 ИСПРАВЛЕНИЕ ОШИБКИ 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 обновлен
- Примеры использования созданы
🎯 СЛЕДУЮЩИЕ ШАГИ
- СРОЧНО: Исправить ошибки импорта в
core/application.py - ТЕСТИРОВАТЬ: Запустить
demo_architecture.py - МИГРИРОВАТЬ: Начать постепенную миграцию обработчиков
- ОПТИМИЗИРОВАТЬ: Добавить кеширование и оптимизации
- ДОКУМЕНТИРОВАТЬ: Закончить документацию
📞 КОНТАКТЫ ДЛЯ ПОДДЕРЖКИ
При возникновении проблем во время миграции:
- Проверить логи в
bot.log - Запустить диагностические тесты
- Связаться с командой разработки
ГОТОВНОСТЬ К МИГРАЦИИ: 90% (после исправления импортов)