Проект представляет серверную часть приложения VK Mini Apps для просмотра организаций в своем городе. Для удобства поиска существуют категории, которые подразделяют организации на основе услуг. Проще говоря, сервис чем-то похож на раздел Авито, где пользователи размещают свои анкеты о том, какую работу могут выполнить (сантехник, парикмахер, строитель и т.п.).
При этом размещение в каталоге является платным, поэтому при добавлении информации об услугах своей организации, необходимо оформить подписку и ежемесячно продлевать.
Администратор приложения обладает интерфейсом, который позволяет управлять каталогом организаций и мастеров, видеть статистику по доходу, блокировать пользователей.
Дата разработки: ноябрь, 2022.
- 🚀 Rest API с автогенерируемой документацией по стандарту OpenAPI
- 💽 Взаимодействие с PostgreSQL через SQLALchemy, Alembic для создания миграций
- 🤖 Чат-бот ВК, который служит для отправки уведомлений пользователям и позволяет запускать рекламные рассылки по категориям
- 💸 Прием платежей через онлайн-кассу Robokassa
- ⚡️ Удобный и быстрый запуск через Docker Compose
- 🌐 Современный прокси-сервер Traefik для маршрутизации
- 🔧 Вспомогательные утилиты: загрузка организаций в БД из CSV, подсчет статистики по приложению используя демон, логгирование через logging
- Python, FastAPI, VK API
- Robokassa API
- SQLAlchemy, PostgreSQL, Alembic
- Docker, Docker Compose, Traefik
Дополнительный микросервис, который обеспечивает работу бота в группе ВК. Он применяется для рекламных рассылок в личных сообщениях сообщества. При старте рассылки администратор может выбрать аудиторию для рассылки: владельцы организаций или все пользователи приложения. После окончания выводится статистическая информация: сколько сообщений было отправлено.
Кроме того, бот уведомляет администратора в случае успешных пополнений баланса у пользователей. Также отправляются уведомления платным пользователям, когда им нужно продлить подписку.
Технологии: Python, VK API, PostgreSQL, SQLAlchemy
Основная часть проекта.
Все методы разделены на 5 роутов, каждый из которых отвечает за определенных раздел:
- Фото: загрузка фото (например, аватарки организаций)
- Пользователи: получение информации о пользователе и её редактирование
- Общая информация: получение информации о доступных городах, категориях и её редактирование
- Организации: получение информации о пользователе и её редактирование
- Платежи: проведение платежей через Robokassa и зачисление денег на баланс пользователя
FastAPI включает в себя автоматическую генерацию документации:
Из-за специфики платформы VK Mini Apps, для которой создавалось приложение, авторизация производится с помощью "параметров запуска", которые передаются вместе с запросом с фронтенда. Это используется вместо сессии, ведь приложение запускается напрямую во фрейме ВКонтакте.
Для грамотной проверки текущего пользователя и его роли (обычный или админ) используются middlewares от FastAPI
Из-за требований заказчика, было решено реализовать хранение фото без отдельного хранилища, а записывать в формате base64 в базу.
Для проведения платежей используется онлайн-касса Robokassa. Фронтенд даёт ссылку на оплату пользователю, после успешной оплаты сторонний сервис присылает информацию об оплате на бекенд и деньги зачисляются.
Также есть интерфейс для администраторов, позволяющий "выдать" деньги напрямую пользователю.
В качестве прокси-сервера для маршрутизации был выбран Traefik. Он современный и позволяет удобно настраивать конфигурацию из Docker.
Настроен cron на подсчет статистики раз в определенное время. Статистика включает в себя информацию о доходах. Кроме того, раз в сутки бот проверяет пользователей, у которых скоро истекает подписка и уведомляет о продлении.
Была реализована подгрузка организаций из локального справочник в формате csv-файла.
Технологии: FastAPI, SQLAlchemy, PostgreSQL, Robokassa API, Docker.
POSTGRES_URL_ENV:str
- ссылка на PostgreSQL базу данныхCLIENT_SECRET:str
- секретная подпись мини-приложения ВКAPP_SECURE_KEY:str
- секретный ключ мини-приложения ВКDEBUG:bool
- запуск в режиме отладкиLOAD_FILE_DATA_ON_START:bool
- подгружать ли данные об организациях из справочника (data.csv - пример справочник)SUPERUSER_TOKEN:str
- ключ супер-пользователя, заменяет собой параметры запуска в авторизацииVK_GROUP_TOKEN:str
- токен группы с чат-ботом с доступом к сообщениямROBOKASSA_LOGIN:str
- логин robokassa (параметр для проверки платежей)ROBOKASSA_PASSWORD:str
- пароль robokassa (параметр для проверки платежей)ROBOKASSA_PASSWORD_2:str
: - пароль robokassa (параметр для проверки платежей)
Параметры запуска читаются с помощью Pydantic в ./core/config.py
. В файле также можно посмотреть значения по умолчанию.
Подробнее про VK Mini Apps и параметры запуска тут.
Для работоспособности чат-бота в ВК необходимо указать токен (в файле конфигурации docker-compose, параметр VK_GROUP_TOKEN) с правом доступа на сообщения: инструкция.
Для локального тестирования создан отдельный docker-compose файл: ./docker-compose.local-tests.yml
. От продакшн версии он отличается отсутствием маршрутизации.
Для запуска выполните:
docker-compose --file docker-compose.local-tests.yml up --build
Бекенд будет запущен на 8000 порту.
Перед запуском адаптируйте конфигурацию Traefik под свои требования.
docker-compose --file docker-compose.yml up --build
Сервис запустится на 80 и 443 портах.
- Скачайте зависимости
pip install -r requirements.txt
- Разверните в локальном окружении PostgreSQL, в .env укажите ссылку на базу данных
- Запускайте
python main.py