Ссылка на бота: https://t.me/TravelManagmentBot
Это приложение предназначено для удобного планирования и упрощения путешествий. В качестве интерфейса для пользователя используется telegram-bot, написанный на python, aiogram3.
В текущее время бот поддерживает функции:
- Регистрация пользователя
- Редактирование профиля
- Добавление путешествий
- Управление пушетествием
- Добавление заметок к путешествию
- Управление заметками
- Добавление друзей в путешествие
Чтобы бот заработал, надо склонировать репозиторий
git clone https://github.com/Central-University-IT-prod/backend-jakefish18.git
cd backend-jakefish18
Заменить токен бота и путь для хранения файлов в docker-compose.yml
BOT_TOKEN: YOUR_BOT_TOKEN
STORAGE_PATH: STORAGE_PATH
И запустить приложение, используя docker-compose
docker compose up -d
В docker-compose.yml поднимаются следующие контейнеры:
- postgres_prod - docker-контейнер postgresql базы
- migrations - alembic миграции проекта, которые содержатся в
/src/migrations
- telegram_bot - telegram-bot, для которого нужно укзаать BOT_TOKEN. В его параметрах передаётся ссылка для подключения к базе
Был сделан акцент на лёгкие и быстрые для использования инструменты:
- Python3.12.1 - язык программирования
- PostgreSQL - система управления базой данных
- AiogramV3 - библиотека для написания telegram-ботов
- SQLAlchemy2 - orm-библиотека для базы данных
- Alembic - библиотека для миграций
- Docker - инструмент для контейниризации
- OpenStreetMapAPI - инструмент для работы с адресами и географией
Решено было воздержаться от использования S3-хранилищ, так как интерфейсом для пользования является
telegram-bot, что уберёт преимущество быстрой загрузки от S3. Поэтому файлы хранятся просто в директории, которую указал пользователь в docker-compose.yml
.
Проект содержит следующие подмодули в /src
:
Этот модуль предназначен для хранения SQLAlchemy-моделей сущностей БД.
В модуле в качестве названия файла используется имя сущности БД. В самих файлах хранятся SQLAlchemy модельки
Модуль telegram-бота, здесь находятся все нужные обработчики и бизнес-логика.
Все обработчики собираются в launch.py
. В init.py
находятся все нужные переменные для работы с ботом.
middlewares
- мидлвари для бота, пока что в нём находится только миддлварь для создания SQLAlchemy сессии для БД.
keyboard_markups
- модуль для создания и хранения клавиатур telegram-бота.
client_commands
- модуль с клиентскими командами в telegram-боте. Команды раскиданы по файлам в хаотчином порядке, нужен рефакторинг и группирование в более общие роутеры.
message_markdowns
- модуль, где хранятся некоторые ответы бота в файлах .html
. Большинство ответов хранятся напрямую в переменных в client_commands
, так как в них не содержится выделение текста: жирность, курсив, ссылки и т.п.
Create, Read, Update, Delete запросы для каждой сущности из models. base.py
содержит базовый класс, в котором описываются
базовые запросы для каждой сущности. Дальше все сущности наследуются в своих файлах от CrudBase
и дополняют функционал.
К примеру, CrudUser
добавляет возможность получения пользователя по telegram_id
, который является уникальным для таблицы users
.
Модуль не выделяется чем-то особенным, тут просто создаются базовые переменные для взаимодействия с БД.
Модуль для какого-то базового и важного функционала, который зависит от проекта, в этом случае тут просто конфиги.
Модуль для работы с географией. Пока он маленький: содержится только функционал для стандартизации адреса по пользовательскому вводу.
Модуль с тестами не pytest
. Чтобы запустить тесты, надо поставить флаг тестов в настрйоках, очистить юазы и ввести
pytest -v
Telegram: https://t.me/JakeFish