- 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
112 lines
4.9 KiB
Markdown
112 lines
4.9 KiB
Markdown
# 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
|
||
|
||
## Использование
|
||
|
||
### Импорт сервисов
|
||
```python
|
||
from voice_bot.handlers.services import VoiceBotService, AudioFileService
|
||
from voice_bot.handlers.utils import get_last_message_text
|
||
```
|
||
|
||
### Использование в handlers
|
||
```python
|
||
@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)
|
||
```
|
||
|
||
### Обработка ошибок
|
||
```python
|
||
try:
|
||
result = voice_service.get_random_audio(user_id)
|
||
except AudioProcessingError as e:
|
||
logger.error(f"Ошибка при получении аудио: {e}")
|
||
# Обработка ошибки
|
||
```
|
||
|
||
## Миграция
|
||
|
||
Для использования новой архитектуры:
|
||
|
||
1. Замените прямые вызовы функций на использование сервисов
|
||
2. Используйте dependency injection вместо глобальных переменных
|
||
3. Обрабатывайте исключения через кастомные классы
|
||
4. Используйте константы вместо хардкода строк
|
||
|
||
## Преимущества новой архитектуры
|
||
|
||
- **Тестируемость** - легко создавать моки и тесты
|
||
- **Поддерживаемость** - четкое разделение ответственности
|
||
- **Расширяемость** - легко добавлять новые функции
|
||
- **Читаемость** - понятная структура кода
|
||
- **Переиспользование** - сервисы можно использовать в разных местах
|