Приложение написано на FastAPI, так как он прекрасно подходит для валидации данных и данной задачи.
В качестве ORM для работы с БД использован gino, для миграций-alembic.
Благодаря pydantic очень легко проводить валидацию отсутствующих полей.
pyjwt используется для генерации JWT токенов.
uvicorn - ASGI сервер для разработки
gunicorn - сервер для запуска в проде (с воркером от uvicorn)
psycopg2-binary используется только для миграций
pyyaml использовался для генерации файла openapi.yaml
email-validator для валидации email адресов (для pydantic)
passlib[bcrypt] для генерации паролей с помощью хэш-функции bcrypt.
pip install -r requirements.txt
pip install -r dev-requirements.txt
pip install -r requirements/production.txt # для деплоя
sudo -u postgres createdb webapp # создание базы createdb
make migrate # применение миграций
cp .env.sample .env
Для работы приложения необходит секретный ключ JWT, он может быть сгенерирован с помощью
make generatekeys
Затем, в файле .env
замените JWT_SECRET_KEY=.... на свой ключ
Так же в файле .env
можно настроить CONNECTION URL для подключения к постгресу
make dev
запускает сервер для разработки
make production
запускает сервер для прода, с двумя микросервисами работающими в одном приложении (ASGI mount)
make users
запускает микросервис users
make offers
запускает микросервис offers
Приложение разделено на два отдельных микросервиса (offers и users). Каждое из них можно запустить вручную.
Если запускать микросервисы отдельно, они не используют полный путь, например /user/registry
. Они используют путь /registry
. Это сделано для настройки префиксов через веб прокси (nginx, например).
При запуске сервера с двумя микросервисами сразу, они монтируются под префиками /user
и /offer
соответственно.
Весь код отформатирован с помощью black и isort и проверен линтером flake8.
Для запуска всех проверок можно использовать make ci
.
make format
можно использовать для форматирования всего кода.
В проекте использован Makefile для упрощения запуска и настройки приложений.
FastAPI генерирует openapi автоматически, поэтому файл openapi.yaml был так же сгенерирован автоматически.
Настройка APPS в файле common/settings.py
используется для автоматической загрузки всех моделей для использования автогенерации миграций (make migration MESSAGE="new revision"
)