Создан  demius PM 4 года назад; Обновил  demius PM год и 6 месяцев назад

Система справочников позволяет создавать в каждом проекте свой набор типов, этапов, приоритетов, сложностей и прочего. Каждый со своими атрибутами. Так как меняются они редко, используются только в контексте проекта, мы не держим их в таблицах, а пакуем в json в поля проекта. Из него они распаковываются в объекты, которые сервисы подставляют в соответствующие Entity.

О системе

Система справочников позволяет создавать в каждом проекте свой набор типов, этапов, приоритетов, сложностей и прочего. Каждый со своими атрибутами. Так как меняются они редко, используются только в контексте проекта, мы не держим их в таблицах, а пакуем в json в поля проекта. Из него они распаковываются в объекты, которые сервисы подставляют в соответствующие Entity.

Сама система реализуется в рамках [tndt-4]

  • Справочник тип задачи [tndt-4]
  • Справочник этап задачи [tndt-5]
  • Справочник сложность задачи [tndt-13]
  • Справочник приоритетность задачи [tndt-15]

- Справочник тип документа (Планируется) тип документа сильно влияет на его логику, и их количество ограничено, будет сделано классическим enum

Архитектура

  • Класс DictionaryItem и производные от него хранят минимум свой id, название в поле name и описание.
  • Класс Dictionary при добавлении нового элемента, генерит ему уникальный id (просто самый большой имеющийся +1). Внешняя система может и свой id добавить, но Dictionary проверит его на уникальность внутри себя.
  • Справочник имеющий более дополнительную логику, наследуется от этих классов.
  • В первой реализации удалять элементы из справочников нельзя. В будущем можно дать возможность их скрывать. Если уж очень надо будет удалить, делать событие DictionaryItemDalateEvent, и удалять, только если все слушатели скажут окей.
  • Класс Dictionary/Fetcher умеет по сущности и переданному словарю извлечь словарь или его значение, чтобы обогатить хранящееся в сущности значение словаря полным итемом, со всей сопутствующей информацией.
  • Класс Dictionary/TypeEnum хранит все существующие типы словарей, где лежат их данные, и какие сущности пользуются их значениями. Там же будет лежать информация о том, где взять всю связанную с конкретным словарем логику.
  • Дополнительная логика, которую реализует справочники лежит в дополнительных сервисах
    • Styler опрашивает все виды справочников сущности, и те, кто должны повлиять на стиль вывода элемента здесь его собирают. (например Этап зачеркивает и закрашивает закрытые задачи, а Приоритет добавляет цветной фон)
    • StageService - определяет по справочнику какие этапы за какими идут, как кнопки можно выводить и где. Будет реализовано в tndt-49
    • BadgeService - добавляет в набор баджей задачи те, которые определяются справочниками Будет реализовано в tndt-55 уже реализовано в Service/Badge в виде набора хэндлеров, не все из которых относятся к справочникам

Обслуживание

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

Запуск локальной установки:

./bin/console app:dictionary:fill <projectsuffix> <dictionary>

Где projectsuffix - суффикс проекта. dictionary - справочник из списка:

  • task.type - тип задачи
  • task.stage - этап задачи
  • task.priority - приоритет задачи
  • task.complexity - сложность задачи

По умолчанию команда меняет только значения только в задачах, где значение справочника не установлено. Можно указать ключ --from-value тогда будут заменены указанные значения.

По умолчанию команда меняет значение справочника на указное по умолчанию, можно указать какое-то особое значение с помощью ключа to-value

Ключ -r - меняет значения с тех значений, для который в настройках более не указан справочник.

Пример запуска с хоста hsrv, - задача у проекта hsrv появилась сложность задачи, надо проставить всем задачам сложность по умолчанию

make console "app:dictionary:fill hsrv task.complexity"