evergreenacorn / django-rest-framework_test_task

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Тестовое задание на django rest framework.

Условия

  1. Дана модель предметной области с сущностями:
    1. Страница (Page)
    2. Контент типа видео (Video)
      • специфичные атрибуты: ссылка на видеофайл, ссылка на файл субтитров
    3. Контент типа аудио (Audio)
      • специфичные атрибуты: битрейт в количестве бит в секунду
    4. Контент типа текст (Text)
      • специфичные атрибуты: поле для хранения текста произвольной длинны
  2. Нужно учитывать, что специфичные атрибуты разных видов контента существенно различаются.
  3. У всех видов контента присутствует атрибут "счетчик просмотров" (counter).
  4. У всех видов контента и страниц есть атрибут "заголовок" (title).
  5. Со страницей может быть связан любой вид контента в любом количестве. Семантика такая: "на страницу можно выложить любой вид контента в любом количестве". Например: на странице может быть 5 видео, 3 аудио и 7 текстов в любом порядке и в перемешку.
    • Следует учитывать, что будущем виды контента могут добавляться и функционал должен легко расширяться

Функциональные требования

  1. Сделать API для получения списка всех страниц.
    • Должна поддерживаться пагинация (постраничная выдача результатов)
    • В ответе должен содержаться URL на API с детальной информацией о странице (пункт №2).
  2. Сделать API для получения детальной информации о странице.
    • Помимо атрибутов страницы в ответе должны содержаться все привязанные к странице объекты контента в виде вложенной структуры - упорядоченного списка привязанных к странице объектов контента со всеми атрибутами, включая специфичные.
  3. При обращении к API с деталями о странице счетчик просмотров каждого объекта контента, привязанного к странице должен увеличиваться на единицу.
    • Нагрузка на данное API предполагается существенная, поэтому желательно непосредственно изменение данных в БД реализовать в фоновой задаче.
    • Важно обратить внимание, что увеличение счетчика должно происходить строго атомарно. То есть, если две задачи параллельно обновляют счетчик одного объекта, то на выходе всегда должно получаться "+2".
  4. Заведение страниц и привязка к ним контента должна выполняться через админку.
    • Должен поддерживаться поиск по заголовку (title) страниц и контента по (частичному совпадению от начала).
    • Желательно для удобства реализовать привязку и управление контентом на странице в виде inline-блоков в разделе управления страницей (Page) в админке.
    • Желательно, чтобы была возможность задавать порядок выдачи в API объектов, привязанных к странице.

Как развернуть проект

  1. Выбрать директорию для проекта и/или создать для него папку
  2. git clone https://github.com/evergreenacorn/django-rest-framework_test_task.git
  3. docker-compose up
  4. docker-compose exec testtask_app python app/manage.py migrate
  5. docker-compose exec testtask_app python app/manage.py createsuperuser

Как провести тесты

  1. Восстановить дамп с данными приложения командой: docker-compose exec testtask_app python app/manage.py loaddata test_pages_content.json
  2. Перейти в /api/v1/
  3. Обновление счетчика просмотров контента на странице срабатывает при переходе на конкретную страницу, пример: /api/v1/pages/1/

TODOs:

  • Добавить фильтры, с возможностью передачи параметра в url get-запроса
  • Добавить тесты

About


Languages

Language:Python 98.9%Language:Dockerfile 1.1%