Этап 1: Список ссылок и сущностей
Зависит от введения redis в проект - tndt-196.
Система в нем будет хранить:
- wiki:links Большой хешмеп ссылок вида
- linkKey = project:objectType:no
- linkKey -> metadataObject
- metadataObject сожержит:
- route до объекта
- routeParams - параметры
- count - сколько раз ссылка упомянута (возможно отдельным объектом, чтобы можно было делать incr/decr
- wiki:linked_from Для каждой сущности список объектов в которых есть ссылка на неё
- wiki:linked_to Для каждой сущности, список ссылок, которые в ней упомянуты (project:objectType:id -> set:linkKey) (счетчик для поиска потерянных объектов, актуально в целом только документам, и наверное не в этой задаче, но начать вести его можно)
objectType - enum, сейчас их три: Project, Task, Doc, определяется по написанию (\w) - проект, (\w-\d) - задача, (\w#\d) - документ (\w#\w) альтернативный способ указать документ
При отрисовке ссылки, она ищется в списке ссылок
- если не находится рисуется красным и ведет по типу объекта на создание оного (если это разрешено, иначе не видет никуда).
- если находится, по метадате определяется объект и путь до него
Появляются бизнес-методы вызываемые системами, кто считает, что добавляет новую ссылку, или удаляет её, они аффектят списки ссылок.
link add( who, where либо target, owner)
- создает если не было ссылку wiki:links - linkKey
- добавляет её wiki:link_owners с указанием где она расположена
Так же здесь консьюмер для индексации, он вызывается или из крона, или по вышеозначенным методам, берет какой-то кусок и проверяет, валидность сылок. (это уже тяжко и тянет на отдельную задачу, хотя с другой стороны, а кто будет заполнять эти списки?)
Наши метания, к чему относится NAS, к дому или hsrv создало задачи и документы по нему в разных проектах