Skip to content
/ app Public

Решение находится по ссылке ->

Notifications You must be signed in to change notification settings

ibooj/app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 

Repository files navigation

Тестовое задание Python Developer

Задание

Необходимо разработать бэкенд для сервиса комментариев. Описать предложенное решение, выбранные механизмы хранения и обработки данных, оценить его плюсы и минусы. Исходный код проекта нужно разместить на Github или Bitbucket. В исходных текстах и имени проекта не должно быть упоминания компании

Требования

  1. Каждый комментарий имеет привязку к определенному пользователю.
  2. У каждого комментария есть дата создания.
  3. Коментарии имеют древовидную структуру - есть возможность оставлять комментарии на комментарии с неограниченной степенью вложенности.
  4. Каждой комментарий имеет привязку к определенной сущности (пост в блоге, страница пользователя, другой комментарий и т.п.), которая однозначно идентифицируется парой значений (идентификатор типа сущности, идентификатор сущности).
  5. Бэкенд должен предоставлять следующие интерфейсы:
    • a. Создание комментария к определенной сущности с указанием сущности, к которой он относится.
    • b. Получение комментариев первого уровня для определенной сущности с пагинацией.
    • c. Получение всех дочерних комментариев для заданного комментария или сущности без ограничения по уровню вложенности. Корнем может являться пара идентифицирующая сущность или id комментария, являющегося корневым для данной ветки. Ответ должен быть таким, чтобы на клиенте можно было воссоздать иерархию комментариев.
    • d. Получение истории комментариев определенного пользователя.
    • e. Выгрузка в файл (например в xml-формате) всей истории комментариев по пользователю или сущности с возможностью указания интервала времени, в котором был создан комментарий пользователя (если не задан - выводить всё). Время ответа на первичный запрос не должно зависеть от объема данных в итоговой выгрузке.
  6. Время ответа на все запросы ограничено 1 секундной. С условием:
    • a. Глубина дерева не менее 100.
    • b. Количество узлов (элементов, имеющих дочерние элементы) в дереве не менее 10^4.

Дополнительные требования

  1. Комментарии могут редактироваться и удаляться. Удаление возможно только, если у комментария нет дочерних комментариев. Реализовать хранение исторических данных с возможностью получения истории для определенного комментария: информация о том, кем и когда был изменен/удален комментарий, что изменилось в комментарии.
  2. Возможность подписки на события комментирования определенной сущности - при создании/редактировании/удалении комментария к этой сущности с сервера уходит PUSH-уведомление клиенту с информацией о созданном/отредактированным/удаленным комментарием в таком виде, чтобы клиент имел возможность динамически добавить/обновить/удалить его в интерфейсе.
  3. Для пункта 5.е требований реализовать гибкий механизм с возможностью добавления различных форматов файлов
Примечания
  1. Аутентификация/авторизация на уровне бэкенда не обязательна, все данные о пользователях, там, где это нужно, могут приходить в теле запроса одним из параметров.
  2. При решении должна использоваться реляционная СУБД (PostgreSQL, MySQL, SQLite и т.п.)

About

Решение находится по ссылке ->

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published