Тестовое задание
Реализовать веб-сервис на базе Django, предоставляющий CRUD REST API для групповых денежных сборов.Приложение должно содержать как минимум три сущности:
- User (модель Пользователя системы, можно использовать стандартного)
- Payment (модель описывающая Платёж для сбора)
- Collect (модель непосредственно Группового денежного сбора).
Групповой сбор должно должен содержать как минимум:
- автора сбора
- название
- повод (один из нескольких на выбор, например, “день рождение”, “свадьба” и т.д.)
- описание
- сумму, которую запланировали собрать (можно сделать “бесконечный” сбор, вез верхней границы)
- сумму, которую собрали на текущий момент
- сколько человек уже сделало пожертвования
- обложку сбора (картинка)
- дата и время завершения сбора
- лента сбора (список пожертвований от других пользователей: сумма, дата и время, ФИО пользователя).
При создании Группового сбора или Платежа по сбору на почту автора/ донатера должно прийти письмо с информацией об успешном создании сбора (отправке платежа). Все эндпоинты соответствуют REST и покрыты документацией Swagger.
Требования:
- Данные хранятся в реляционной БД, взаимодействие с ней осуществляется посредством Django ORM.
- API реализовано на базе Django REST Framework.
- Реализовано кэширование данных, возвращаемых GET-эндпоинтом, с обеспечением достоверности ответов.
- Проект должен быть докеризирован и запускаться через docker compose up.
- Должна присутствовать Management command для наполнения БД моковыми данными (несколько тысяч).
Клонировать репозиторий и перейти в него в командной строке:
git clone git@github.com:ClosedEyeVisuals/api-donation.git
Cоздать .env файл по примеру:
SECRET_KEY='sOme_SeCR3t_KeY'
DEBUG=False
ALLOWED_HOSTS=host1, host2
Запустить контейнеры:
docker compose up
Выполнить миграции:
docker compose exec backend python manage.py migrate
Наполнить БД тестовыми данными
docker compose exec backend python manage.py load_collects
Документация с полным перечнем эндпоинтов доступна после запуска проекта по адресу:
http://localhost:8000/api/swagger/