- Deleted the Makefile, `README_TESTING.md`, and several deployment scripts to streamline the project. - Updated `.dockerignore` to exclude unnecessary development files. - Adjusted database schema comments for clarity. - Refactored metrics handling in middleware for improved command extraction and logging. - Enhanced command mappings for buttons and callbacks in constants for better maintainability. - Start refactor voice bot
Voice Bot - Архитектура
Обзор
Voice Bot был рефакторен в соответствии с принципами чистой архитектуры, следуя паттернам, используемым в helper_bot.
Структура проекта
voice_bot/
├── handlers/
│ ├── __init__.py # Экспорт всех модулей
│ ├── constants.py # Константы и сообщения
│ ├── dependencies.py # Dependency injection и middleware
│ ├── exceptions.py # Кастомные исключения
│ ├── services.py # Бизнес-логика
│ ├── utils.py # Вспомогательные функции
│ ├── voice_handler.py # Обработчики голосовых сообщений
│ └── callback_handler.py # Обработчики callback'ов
├── keyboards/
│ └── keyboards.py # Клавиатуры
├── utils/
│ └── helper_func.py # Устаревшие функции (для совместимости)
├── main.py # Точка входа
└── README.md # Этот файл
Принципы архитектуры
1. Разделение ответственности
- Handlers - только обработка событий и координация
- Services - бизнес-логика и операции с данными
- Utils - вспомогательные функции
- Constants - константы и сообщения
2. Dependency Injection
- Использование
VoiceBotMiddlewareдля внедрения зависимостей - Типизированные зависимости
BotDBиSettings - Автоматическое получение экземпляров через
get_global_instance()
3. Обработка ошибок
- Кастомные исключения для разных типов ошибок
- Логирование всех ошибок
- Graceful fallback для пользователей
4. Константы
- Все строки и значения вынесены в
constants.py - Легко изменять сообщения и настройки
- Централизованное управление конфигурацией
Основные компоненты
VoiceBotService
Основной сервис для работы с голосовыми сообщениями:
- Отправка приветственных сообщений
- Управление аудио файлами
- Работа с базой данных
AudioFileService
Сервис для работы с аудио файлами:
- Генерация имен файлов
- Сохранение в базу данных
- Скачивание и сохранение файлов
VoiceBotMiddleware
Middleware для dependency injection:
- Автоматическое внедрение зависимостей
- Обработка ошибок
- Совместимость с MagicData
Использование
Импорт сервисов
from voice_bot.handlers.services import VoiceBotService, AudioFileService
from voice_bot.handlers.utils import get_last_message_text
Использование в handlers
@voice_router.message(Command("start"))
async def start(message: types.Message, bot_db: BotDB, settings: Settings):
voice_service = VoiceBotService(bot_db, settings)
await voice_service.send_welcome_messages(message, user_emoji)
Обработка ошибок
try:
result = voice_service.get_random_audio(user_id)
except AudioProcessingError as e:
logger.error(f"Ошибка при получении аудио: {e}")
# Обработка ошибки
Миграция
Для использования новой архитектуры:
- Замените прямые вызовы функций на использование сервисов
- Используйте dependency injection вместо глобальных переменных
- Обрабатывайте исключения через кастомные классы
- Используйте константы вместо хардкода строк
Преимущества новой архитектуры
- Тестируемость - легко создавать моки и тесты
- Поддерживаемость - четкое разделение ответственности
- Расширяемость - легко добавлять новые функции
- Читаемость - понятная структура кода
- Переиспользование - сервисы можно использовать в разных местах