Как работать и обновлять вложенные, сортируемые записи - PullRequest
1 голос
/ 23 апреля 2020

Как работать с вложенными сортируемыми записями

Я не разработчик, но я пытаюсь получить некоторые новые навыки. У меня небольшой опыт работы с PHP, скажем, я уже создал несколько небольших приложений, и они работают довольно хорошо.

Поскольку моя работа в основном работает с Linux системами, я решил изучить python и изменить мой фокус, так как он может помочь мне в Интернете, а также в сценариях для автоматизации и т. д. c ...

Так вот что я сейчас пытаюсь достичь.

Задача:

У нас есть несколько регулярных мероприятий, в которых нескольким командам приходится участвовать и работать над разными задачами. Одной команде может потребоваться выполнить задачу, которая блокирует другую команду для запуска части своей команды. вещи ...

Тем не менее, мне нужно создать что-то вроде живого многопользовательского приложения ToDo, обновляемого в реальном времени, а задачи вложены и отсортированы надлежащим образом.

Пример будет выглядеть так:

Main Taks
|
|-> Child task ---------------------------------------- [action button][action button][...]
|      |-> Child of the child task -------------------- [action button][action button][...]
|          |-> etc... --------------------------------- [action button][action button][...]
|-> Another child task -------------------------------- [action button][action button][...]
|   |-> Another nested child -------------------------- [action button][action button][...]
|-> Another child task -------------------------------- [action button][action button][...]
etc...

Я подумываю о создании внутреннего API с использованием python, и я предполагаю vuejs или реагирую на внешний интерфейс, так как он должен быть в реальном времени.

Копание статей и статей I нашел правильный способ структурировать таблицу базы данных так, чтобы у меня была неограниченная вложенность:

----------------------------------
| id | parent_id | order | etc.. |
----------------------------------

Так что в значительной степени у меня может быть инкрементный идентификатор, тогда родительский идентификатор может быть 0 для root и относительный идентификатор для родитель. У меня также есть порядок, поэтому с помощью рекурсивной функции в python я могу сгенерировать хороший json для отправки во внешний интерфейс.

Моя проблема в том, как работать с переупорядочением дерева? Я действительно не могу понять, как это сделать. Как и в примере, который я привел, как правильно переместить последнее «Другое дочернее задание» на 4-й уровень и как дочернее «Дочернее задание». Также все дети должны быть в точном порядке, так как они должны выполняться в строгом порядке.

Я хочу, чтобы это было перетаскиваемым. Все еще изучаю javascript, но я нашел много готовых go решений, которые выглядят довольно круто. Я просто не могу понять, как обновить порядок всех дочерних элементов ...

Полагаю, язык не так важен, в основном это логика c, которую нужно реализовать.

Что мне отправлять из внешнего интерфейса, когда что-то в дереве изменяется, и как это обрабатывать в бэкэнде ....

Есть идеи?

ОБНОВЛЕНИЕ:

Я еще мало что сделал. Сначала я попробовал с PHP, но потом понял, что сделаю это с python, используя Flask. В настоящее время все еще изучаю Python / Flask. Это как те проекты, где вы делаете что-то, пока учитесь, и в конце вы получаете то, что вы могли бы использовать в реальной жизни. В настоящее время я написал только маршрут и механизм для извлечения всех задач и возврата их как json:

Примечание: я использую SQLAlchemy

class TreeView(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    parent_id = db.Column(db.Integer)
    order = db.Column(db.Integer)
    name = db.Column(db.String(200))

Это модель БД

def todo():

    output = []
    records = TreeView.query.all()
    for record in records:
        robj = {}
        robj['id'] = record.id
        robj['parent_id'] = record.parent_id
        robj['order'] = record.order
        robj['name'] = record.name
        output.append(robj)

    return jsonify(output)

Это запрос и возврат json.

В настоящее время проверяется vuejs с примерами того, как мне нужно вложить json, чтобы он надлежащим образом отформатирован для обработки вложенным деревом .

Главный блок для меня, однако, заключается в том, чтобы разобраться, как на самом деле сортировать вещи, особенно при обновлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...