Skip to content

w7a8n1y4a/pepeunit_backend

Repository files navigation

Pepeunit Backend

Внешние зависимости

  1. Телеграмм Бот и его Api Key
  2. Чистая база данных Postgresql
  3. Развёрнутый EMQX MQTT Broker c настроенным acl list, нужные значения в acl list:
    {allow, {ipaddr, "127.0.0.1"}, all, ["$SYS/#", "#"]}.
    {deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.
    {deny, all}.
    
  4. Redis

Основные этапы развёртывания

  1. Установите пакеты при помощи команды poetry install
  2. Войдите в окружение при помощи команды poetry shell
  3. Настройте .env файл по образцу .env_example, для корректной настройки вам потребуется API key доступа от EMQX MQTT Broker, его можно сгенерировать в веб интерфейсе EMQX admin panel/system/API Key - это на левой панели*
  4. Выполните миграцию в БД alembic upgrade head - требуется только при первом запуске
  5. Запустите Бэкенд приложение командой - uvicorn app.main:app --host 0.0.0.0 --port 5000

Что произойдёт в момент запуска приложения ?

  1. Проверка cоединения с EMQX MQTT Broker
  2. Удаление старого http auth web hook в EMQX MQTT Broker
  3. Установка нового http auth web hook в EMQX MQTT Broker, он позволяет авторизовать каждый запрос ко всем топикам
  4. Установка redis http auth hook для авторизации Бэкенда
  5. Установка настроек кэширования для авторизации EMQX MQTT Broker
  6. Будет получена информация о текущем состоянии web hook Телеграм бота, если url текущего хука не совпадёт с целевым при запуске, он будет перезаписан
  7. Fastapi-mqtt установит соединение с EMQX MQTT Broker
  8. Бэкенд подпишется на топики: example.com/+/pepeunit и example.com/+/+/+/pepeunit
  9. Запуск веб сервера

Как работает интеграция с Telegram Bot

Есть два режима работы: через web hook, и через infinity pooling - выбор осуществляется на основании BACKEND_DOMAIN.

  • если введён ip адрес, будет использовать pooling
  • если введён домен, будет использоваться web hook

Как найти playground`s Swagger UI и GraphQL

  1. Введите в связанном Телеграм боте команду /info - она доступна без верификации
  2. https://BACKEND_DOMAIN/APP_PREFIX/docs - Swagger UI
  3. https://BACKEND_DOMAIN/APP_PREFIX/graphql - GraphQL

Поддержание формата кода

  1. Установите .pre-commit-config.yaml на основе .pre-commit-config.example.yaml
  2. Теперь при каждом коммите у вас будет происходить проверка через black и isort
  3. В случае, если нужно запустить вручную - pre-commit run --all-files

Миграции базы данных

  1. Создание новой миграции alembic revision -m 'best_revision_name'
  2. Применение новой миграции alembic upgrade head

Интеграционное тестирование

Запустить интеграционное тестирование можно командой - pytest tests -v