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