fmarchenko / comment_tree

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

BACKEND для сервиса комментариев

Реализация

  1. Для хранения в БД комментариев используются подход Closure Table использующий две таблицы, в первой хранятся сами комментарии, а во второй связи между ними.
    • Плюсы данного подхода:
      1. Быстрое получение предков или потомков для любого узла не зависимо от глубины дерева.
      2. При данном подходе операции вставки в БД менее ресурсозатратные по сравнению с другими древовиными структурами.
  2. Для реализации использовал Django, т.к. использую его каждый день.
  3. Точку входа для подписки на уведомления не делал, т.к. считаю что она относится к сущностям родителям комментариев, а они в решение задания представлены абстрактно и производить над ними какие либо действия нет возможности, но проверка подписчиков на уведомления реализованна, уведомления проверяются и создаются.
  4. Не использовал никаких RESTFul фреймворков для того, чтобы показать понимание того как это работает.

Точки входа

  1. /comments/
    • GET - получение списка комментариев с фильтрацией по 'id', 'owner_type_id', 'owner_id'. (параметр full_tree=1 вернет список с развернутым деревом)
    • POST - добавление нового комментария.
  2. /comments/<comment_pk>/
    • GET - получение информации о комментарии. (параметр full_tree=1 вернет список с развернутым деревом)
    • PUT - редактирование комментария.
    • DELETE - удаление комментария.
  3. /comments/user/<user_pk>/
    • GET - получение списка комментариев пользователя.
  4. /comments/dump/
    • GET - список выгрузок для пользователя или объекта.
    • POST - запрос на создане выгрузки, в ответ приходит id выгрузки с которым далее нужно запрашивать статус выгрузки в следующей точке входа (5). В качестве параметров принимает <user_id> или <owner_type_id> и <owner_id>
  5. /comments/dump/<dump_pk>/
    • GET - запрос результата выполнения выгрузки, если готова вернет ссылку на файл выгрузки.

Тесты

На скорую руку накидал несколько простых тестов (comments/tests.py), для запуска потребутся:

cd <project_path>
virtualenv env --no-site-packages
source env/bin/activate
pip install -r requirements.txt
python manage.py test

P.S. Возможно тесты не покрывают должым образовм весь сервис ;-)

About


Languages

Language:Python 100.0%