Skip to content

Веб-сервис на базе Django, предоставляющий CRUD REST API для групповых денежных сборов.

Notifications You must be signed in to change notification settings

Badmajor/pronin_team_test_task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ProninTeam_test_task

Тестовое задание Backend Python (ProninTeam)

Задача

Реализовать веб-сервис на базе Django, предоставляющий CRUD REST API для групповых денежных сборов. Приложение должно содержать как минимум три сущности: User (модель Пользователя системы, можно использовать стандартного) Payment (модель описывающая Платёж для сбора) Collect (модель непосредственно Группового денежного сбора). Групповой сбор должно должен содержать как минимум: автора сбора название повод (один из нескольких на выбор, например, “день рождение”, “свадьба” и т.д.) описание сумму, которую запланировали собрать (можно сделать “бесконечный” сбор, вез верхней границы) сумму, которую собрали на текущий момент сколько человек уже сделало пожертвования обложку сбора (картинка) Тестовое задание Backend Python (ProninTeam) 1дата и время завершения сбора лента сбора (список пожертвований от других пользователей: сумма, дата и время, ФИО пользователя) При создании Группового сбора или Платежа по сбору на почту автора/ донатера должно прийти письмо с информацией об успешном создании сбора (отправке платежа). Все эндпоинты соответствуют REST и покрыты документацией Swagger. Требования

  1. Данные хранятся в реляционной БД, взаимодействие с ней осуществляется посредством Django ORM.
  2. API реализовано на базе Django REST Framework
  3. Реализовано кэширование данных, возвращаемых GET-эндпоинтом, с обеспечением достоверности ответов
  4. Проект должен быть докеризирован и запускаться через docker compose up .
  5. Должна присутствовать 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

Эндпоинты:

About

Веб-сервис на базе Django, предоставляющий CRUD REST API для групповых денежных сборов.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages