Skip to content

Latest commit

 

History

History
90 lines (79 loc) · 5.08 KB

README.md

File metadata and controls

90 lines (79 loc) · 5.08 KB

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

Эндпоинты: