- Как быстро начать работу — запустить проект «из коробки»
- Как использовать продвинутую конфигурацию (требуются знания из ч. 1)
Установка предельно проста:
git clone https://github.com/EgorOnishchuk/MeteobotПосле клонирования репозитория Вам необходимо создать файл .env в корне проекта по шаблону из .env.template. Далее — проверьте наличие актуальной версии Docker (настоятельно рекомендую воспользоваться официальной инструкцией).
И, наконец, выполните самую важную команду:
docker compose upТеперь Ваш бот должен быть доступен в Телеграме. Журналы событий пишутся в /var/lib/docker/containers/<ID контейнера>/*.log, откуда могут быть собраны централизованными системами (например, ELK).
Прежде чем дорабатывать модули приложения под себя следует кратко описать архитектуру. Моей целью было создание Бота, который:
- полностью соответствует идеологии MVP
- разделён на слои репозиторий — сервис — презентер — представление, общающиеся через DTO
- совместим с различными СУБД, ORM (её использование необязательно) и валидаторами
- не перегружен абстракциями: присутствует только то, в чём действительно есть необходимость
Рассмотрим три основных сценария написания собственной функциональности для нашего погодного агрегатора.
Перейдём к repositories.py, расположенному в model: здесь находится репозиторий Asyncpg (но Вы можете называть его DAO или как-то ещё — разница между ними весьма условная). Для максимальной производительности был выбран чистый SQL, но при появление новых сущностей, особенно CRUD, может потребоваться внедрение SQLAlchemy.
Сервис следует принципу инверсии зависимостей, а это значит, что для перехода на другое хранилище данных (и даже необязательно БД: при необходимости всё можно хранить в файлах) достаточно:
- Создать новый репозиторий
- Изменить конфигурацию сервиса через инъекцию зависимости Aiogram
- По необходимости добавить промежуточное ПО (middleware), например, для внедрения сессии
- Создать новую схему — наследника Schema в schemas.py
- Применить её к выходным и/или входным данным репозитория через соответствующие декораторы
Просто создать и подменить в презентере (в контексте фреймворка он называется «диспетчером») новый подкласс View. Это может понадобиться, если Вы хотите отказаться от форматирования сообщений через Markdown или поддерживать два разных представления.
- Егор Онищук — разработка, тестирование и документирование
