Тестовое задание Backend Python (ProninTeam)
Реализовать веб-сервис на базе Django, предоставляющий CRUD REST API для групповых денежных сборов. Приложение должно содержать как минимум три сущности: User (модель Пользователя системы, можно использовать стандартного) Payment (модель описывающая Платёж для сбора) Collect (модель непосредственно Группового денежного сбора). Групповой сбор должно должен содержать как минимум: автора сбора название повод (один из нескольких на выбор, например, “день рождение”, “свадьба” и т.д.) описание сумму, которую запланировали собрать (можно сделать “бесконечный” сбор, вез верхней границы) сумму, которую собрали на текущий момент сколько человек уже сделало пожертвования обложку сбора (картинка) Тестовое задание Backend Python (ProninTeam) 1дата и время завершения сбора лента сбора (список пожертвований от других пользователей: сумма, дата и время, ФИО пользователя) При создании Группового сбора или Платежа по сбору на почту автора/ донатера должно прийти письмо с информацией об успешном создании сбора (отправке платежа). Все эндпоинты соответствуют REST и покрыты документацией Swagger. Требования
- Данные хранятся в реляционной БД, взаимодействие с ней осуществляется посредством Django ORM.
- API реализовано на базе Django REST Framework
- Реализовано кэширование данных, возвращаемых GET-эндпоинтом, с обеспечением достоверности ответов
- Проект должен быть докеризирован и запускаться через docker compose up .
- Должна присутствовать Management command для наполнения БД моковыми данными (несколько тысяч). Можно использовать любые дополнительные библиотеки.
Стек: python, docker, nginx, redis, django, docker-compose, django-rest-framework, postgresql, celery, rabbitmq, Faker, django-cacheops, drf_yasg, djoser
Данные хранятся в реляционной базе PostgreSQL в отдельном контейнере.
API реализован стандартными инструментами DRF
Регистрация и аутентификация реализована с помощью djoser
Кеширование данных реализовано библиотекой Django Cacheops. Кешируются аутентификации пользователей и все модели из приложения payments. Кеш хранится в Redis, так же поднят в отдельном контейнере.
Для отправки писем пользователям при создании платежа или сбора использовал Celery и RabbitMQ для асинхронной отправки. Celery запущен в совместно с django, у RabbirMQ свой контейнер.
Management command 'add_mock_data' реализована стандартными инструментами Django.
Документация генерируется автоматически при помощи библиотеки drf-yasg
Клонировать репозиторий и перейти в каталог:
git clone git@github.com:Badmajor/pronin_team_test_task.git
Перейти в каталог с docker-compose.yml
cd pronin_team_test_task/infra
Подготовить файл .env
cp .env.example .env
Упаковать и запустить контейнеры:
sudo docker compose up --build -d
Выполнить миграции:
sudo docker compose exec backend python manage.py migrate
Наполнить базу данных:
sudo docker compose exec backend python manage.py add_mock_data
- http://127.0.0.1:8777/api/collects/ - сборы
- http://127.0.0.1:8777/swagger/ - документация