NL_Continent_test_task
- Дана модель предметной области с сущностями:
- Страница (Page)
- Контент типа видео (Video)
- специфичные атрибуты: ссылка на видеофайл, ссылка на файл субтитров
- Контент типа аудио (Audio)
- специфичные атрибуты: поле для хранения текста произвольной длинны
- Нужно учитывать, что специфичные атрибуты разных видов контента существенно различаются.
- У всех видов контента присутствует атрибут "счетчик просмотров" (counter).
- У всех видов контента и страниц есть атрибут "заголовок" (title).
- Со страницей может быть связан любой вид контента в любом количестве. Семантика такая: "на страницу можно выложить любой вид контента в любом количистве". Например: на странице может быть 5 видео, 3 аудио и 7 текстов в любом порядке и в перемешку.
- Следует учитывать, что в будущем виды контента могут добавляться и функционал должен легко расширятся.
- Сделать API для получения списка всех страниц.
- Должна поддерживаться пагинация (постраничная выдача результатов)
- В ответе должен содержаться URL на API с детальной информацией о странице (пункт №2).
- Сделать API ля получения детальной информации о странице
- Помимо атрибутов страницы в ответе должны содержатся все привязанные к странице объекты контента в виде вложенной структуры-упорядоченого списка привязанных к странице объектов контента со всеми атрибутами, включая специфичные.
- При обращении к API с деталями о странице счетчик просмотров каждого объекта контента, привязанного к странице должен увеличится на единицу.
- Нагрузка на данное API предполагается существенная, поэтому желательно непосредственно изменение данных в БД реализовать в фоновой задаче.
- Важно обратить внимание, что увеличение счетчика должно происходить строго атомарно. То есть, если две задачи паралельно обновляют счетчик одного объекта, то на выходе всегда должно получится "+2".
- Заведение страниц и привязка к ним контента должна выполнятся через админку.
- Должен поддерживаться поиск по заголовку (title) страниц и контента (по частичному совпадению от начала).
- Желательно для удобства реализовать привязку и управление контентом на странице в виде inline-блоков в разделе управления страницей (Page) в админке.
- Желательно, чтобы была возможность задавать порядок выдачи в API объектов, привязанных к странице.
git clone https://github.com/KorsakovPV/NL_Continent_test_task
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser
sudo docker run -p 6379: 6379 --name some-redis -d redis
celery -A mysite worker -l INFO -f logfile.log
python manage.py runserver
http://127.0.0.1:8000/admin/
http://127.0.0.1:8000/page/
Проходим по ссылке в результатах и проверяем работу метода retrieve. При каждом вызове значение counter увеличивается.