Skip to content

Central-University-IT-prod/public-backend-jakefish18

Repository files navigation

Backend: Travel agent 3.0


Ссылка на бота: https://t.me/TravelManagmentBot

Это приложение предназначено для удобного планирования и упрощения путешествий. В качестве интерфейса для пользователя используется telegram-bot, написанный на python, aiogram3.

В текущее время бот поддерживает функции:

  1. Регистрация пользователя
  2. Редактирование профиля
  3. Добавление путешествий
  4. Управление пушетествием
  5. Добавление заметок к путешествию
  6. Управление заметками
  7. Добавление друзей в путешествие

Примеры использования

Регистрация

use_examples/registration.gif

Добавление путешествия

Screencast from 2024-03-26 00-16-48.gif

Добавление заметки

note_add

Добавление пользователя в путешествие

friend_invite

Сборка и запуск проекта

Чтобы бот заработал, надо склонировать репозиторий

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 поднимаются следующие контейнеры:

  1. postgres_prod - docker-контейнер postgresql базы
  2. migrations - alembic миграции проекта, которые содержатся в /src/migrations
  3. telegram_bot - telegram-bot, для которого нужно укзаать BOT_TOKEN. В его параметрах передаётся ссылка для подключения к базе

Использованные технологии

Был сделан акцент на лёгкие и быстрые для использования инструменты:

  1. Python3.12.1 - язык программирования
  2. PostgreSQL - система управления базой данных
  3. AiogramV3 - библиотека для написания telegram-ботов
  4. SQLAlchemy2 - orm-библиотека для базы данных
  5. Alembic - библиотека для миграций
  6. Docker - инструмент для контейниризации
  7. OpenStreetMapAPI - инструмент для работы с адресами и географией

Решено было воздержаться от использования S3-хранилищ, так как интерфейсом для пользования является telegram-bot, что уберёт преимущество быстрой загрузки от S3. Поэтому файлы хранятся просто в директории, которую указал пользователь в docker-compose.yml.

Схема базы данных

Ссылка на dbdiagram img.png

Структура проекта

Проект содержит следующие подмодули в /src:

models

Этот модуль предназначен для хранения SQLAlchemy-моделей сущностей БД.

В модуле в качестве названия файла используется имя сущности БД. В самих файлах хранятся SQLAlchemy модельки

telegram_bot

Модуль telegram-бота, здесь находятся все нужные обработчики и бизнес-логика. Все обработчики собираются в launch.py. В init.py находятся все нужные переменные для работы с ботом.

middlewares - мидлвари для бота, пока что в нём находится только миддлварь для создания SQLAlchemy сессии для БД.

keyboard_markups - модуль для создания и хранения клавиатур telegram-бота.

client_commands - модуль с клиентскими командами в telegram-боте. Команды раскиданы по файлам в хаотчином порядке, нужен рефакторинг и группирование в более общие роутеры.

message_markdowns - модуль, где хранятся некоторые ответы бота в файлах .html. Большинство ответов хранятся напрямую в переменных в client_commands, так как в них не содержится выделение текста: жирность, курсив, ссылки и т.п.

crud

Create, Read, Update, Delete запросы для каждой сущности из models. base.py содержит базовый класс, в котором описываются базовые запросы для каждой сущности. Дальше все сущности наследуются в своих файлах от CrudBase и дополняют функционал. К примеру, CrudUser добавляет возможность получения пользователя по telegram_id, который является уникальным для таблицы users.

database

Модуль не выделяется чем-то особенным, тут просто создаются базовые переменные для взаимодействия с БД.

core

Модуль для какого-то базового и важного функционала, который зависит от проекта, в этом случае тут просто конфиги.

geography

Модуль для работы с географией. Пока он маленький: содержится только функционал для стандартизации адреса по пользовательскому вводу.

tests

Модуль с тестами не pytest. Чтобы запустить тесты, надо поставить флаг тестов в настрйоках, очистить юазы и ввести

pytest -v

img.png

Контакты

Telegram: https://t.me/JakeFish

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages