Referral-FastAPI - это сервис реферальной системы.
- Получение реферального кода по email адресу реферера (без аутентификации);
- Регистрация по email адресу и паролю (реферальный код опционален);
- Аутентификация пользователя с помощью
JWTиOauth 2.0; - Получение информации о себе и своих реферальных кодах;
- Получение информации о своих рефералах;
- Создание/Удаление своих реферальных кодов;
- Активация/Деактивация своих реферальных кодов;
- У реферальных кодов есть срок годности;
- В один момент времени может быть активен только один код;
- При регистрации пользователя по реферальному коду, его рефереру присылается на email уведомление об этом с помощью
celery.
- Асинхронно использовал
SQLAlchemyдля быстрой обработки запросов; - Внедрил миграции для управления версиями БД с помощью
Alembic; - При помощи
Redisприменил кеширование для выдачи кода по email реферера и получения информации о своих рефералах; - Для написания и выполнения тестов выбрал
Pytest; - Применил Docker-Compose для связи нескольких сервисов (
Nginx,API,Postgres-DB,Redis,Celery,Flower); - Настроил
Nginxдля работы на локальном хосте; - Использовал инструменты для разработки:
PDM,Ruff,Black,isort.
https://github.com/Bllagden/Booking-FastAPI
- Использование
JWTиOauth 2.0(в Booking-FastAPIJWTиcookies); - Улучшена работа сессий
SQLAlchemy(их создание вынесено в отдельную функцию); - Улучшена структура проекта (добавлены директории
adaptersиcore); - Внедрено версионирование API.
- Cистему авторизации (сейчас у всех аутентифицированных пользователей одинаковые права);
- Полностью покрыть тестами.
Для форматирования кода используются Black и isort (с профилем Black).
Для статического анализа кода используется Ruff.
PDM, кроме работы с зависимостями, позволяет использовать скрипты для автоматизации процессов проверки и форматирования кода.
Вызов скрипта: pdm run lint_src
Скрипт из
pyproject.toml:[tool.pdm.scripts]
lint_src = {composite = [
"ruff check ./src --fix --show-fixes",
"black ./src",
"ruff check ./src --fix --show-fixes",
"alembic check",
]}
При запуске через Docker Compose файл .env.dev заменяется на .env.prod (настройка docker-compose.yml).
При тестировании файл .env.dev заменяется на .env.test (с помощью библиотеки pytest-dotenv).
Для этого в
pyproject.tomlдобавлено:[tool.pytest.ini_options]
env_files = [".env.test",]
Для запуска тестов из консоли необходимо явно указать .env файл:
pytest --envfile .env.test -s -v
AUTH_SECRET_KEY в .env файлах
from secrets import token_bytes
from base64 import b64encode
print(b64encode(token_bytes(32)).decode())
-
Установить:
-
Склонировать репозиторий:
git clone git@github.com:Bllagden/Referral-FastAPI.git cd Referral-FastAPI -
Установить зависимости:
pdm install -
Создать .env файлы:
.env.dev,.env.testи.env.prodпо аналогии с:
.env_example.dev,.env_example.testи.env_example.prod
(.env.prodнеобязателен) -
Настройка БД:
Создать
DEV-DBиTEST-DBи вписать настройки для подключения к ним в.envфайлы.Находясь в корне
Referral-FastAPIсделать миграцию по очереди для обеих (использовать для этого.env.dev):alembic upgrade head -
Настройка Celery:
Включить двухэтапную аутентификацию и создать пароль приложения в настройках Google аккаунта для отправки электронных писем через
Celery. Добавить пароль приложения и почту в.envфайлы (SMTP). -
Запуск:
Запустить
redis-server;Открыть
Referral-FastAPIчерез VSCode и изRun and Debugзапустить:
Referral FastAPI,Celery WorkerиCelery Flower.Настройки находятся в
.vscode/launch.json(там же есть команды для прямого запуска из командной оболочки). -
Доступ:
API: http://127.0.0.1:8000/v1/docs или http://127.0.0.1:8000/latest/docs
Flower: http://127.0.0.1:5555
-
Склонировать репозиторий:
git clone git@github.com:Bllagden/Referral-FastAPI.git cd Referral-FastAPI -
Создать .env файлы:
.env.dev,.env.testи.env.prodпо аналогии с:
.env_example.dev,.env_example.testи.env_example.prod
(.env.devи.env.testнеобязательны) -
Запуск:
docker-compose up -
Доступ:
API:
http://YOUR_IP/v1/docsилиhttp://YOUR_IP/latest/docs
Flower:http://YOUR_IP/flower/
Если взять настройки из .env_examples:
-
DEV-DB(необходимо создать для запуска приложения из VSCode)Host:
localhost
Port:5432
Main db:fastapi_referral_dev
Username:postgres
Password:postgres -
PROD-DB(создается сама в докер-контейнере, есть возможность подключиться к ней извне)Host:
YOUR_IP
Port:5433
Main db:referral_app
Username:postgres_user
Password:postgres_password*нужен сложный пароль -
TEST-DB(во время тестов заполняется сама данными из mock-файлов; создается также, как иDEV-DB, но с другим именем)Main db:
fastapi_referral_test
