Как работать с вложенными сортируемыми записями
Я не разработчик, но я пытаюсь получить некоторые новые навыки. У меня небольшой опыт работы с 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, чтобы он надлежащим образом отформатирован для обработки вложенным деревом .
Главный блок для меня, однако, заключается в том, чтобы разобраться, как на самом деле сортировать вещи, особенно при обновлении.