- Дана модель предметной области с сущностями:
- Страница (Page)
- Контент типа видео (Video)
- специфичные атрибуты: ссылка на видеофайл, ссылка на файл субтитров
- Контент типа аудио (Audio)
- специфичные атрибуты: битрейт в количестве бит в секунду
- Контент типа текст (Text)
- специфичные атрибуты: поле для хранения текста произвольной длинны
- Нужно учитывать, что специфичные атрибуты разных видов контента существенно различаются.
- У всех видов контента присутствует атрибут "счетчик просмотров" (counter).
- У всех видов контента и страниц есть атрибут "заголовок" (title).
- Со страницей может быть связан любой вид контента в любом количестве. Семантика такая: "на страницу можно выложить любой вид контента в любом количестве". Например: на странице может быть 5 видео, 3 аудио и 7 текстов в любом порядке и в перемешку.
- Следует учитывать, что будущем виды контента могут добавляться и функционал должен легко расширяться
- Сделать API для получения списка всех страниц.
- Должна поддерживаться пагинация (постраничная выдача результатов)
- В ответе должен содержаться URL на API с детальной информацией о странице (пункт №2).
- Сделать API для получения детальной информации о странице.
- Помимо атрибутов страницы в ответе должны содержаться все привязанные к странице объекты контента в виде вложенной структуры - упорядоченного списка привязанных к странице объектов контента со всеми атрибутами, включая специфичные.
- При обращении к API с деталями о странице счетчик просмотров каждого объекта контента, привязанного к странице должен увеличиваться на единицу.
- Нагрузка на данное API предполагается существенная, поэтому желательно непосредственно изменение данных в БД реализовать в фоновой задаче.
- Важно обратить внимание, что увеличение счетчика должно происходить строго атомарно. То есть, если две задачи параллельно обновляют счетчик одного объекта, то на выходе всегда должно получаться "+2".
- Заведение страниц и привязка к ним контента должна выполняться через админку.
- Должен поддерживаться поиск по заголовку (title) страниц и контента по (частичному совпадению от начала).
- Желательно для удобства реализовать привязку и управление контентом на странице в виде inline-блоков в разделе управления страницей (Page) в админке.
- Желательно, чтобы была возможность задавать порядок выдачи в API объектов, привязанных к странице.
- Выбрать директорию для проекта и/или создать для него папку
- git clone https://github.com/evergreenacorn/django-rest-framework_test_task.git
- docker-compose up
- docker-compose exec testtask_app python app/manage.py migrate
- docker-compose exec testtask_app python app/manage.py createsuperuser
- Восстановить дамп с данными приложения командой: docker-compose exec testtask_app python app/manage.py loaddata test_pages_content.json
- Перейти в /api/v1/
- Обновление счетчика просмотров контента на странице срабатывает при переходе на конкретную страницу, пример: /api/v1/pages/1/
- Добавить фильтры, с возможностью передачи параметра в url get-запроса
- Добавить тесты