pinkmine/docs/Как это работает/Анализ изменений в задаче.md

3.9 KiB
Raw Blame History

Как было описано в документе Сохранение задачи в кеш CouchDB специфика работы с данными из issue такова что есть два состояния - предыдущее и текущее состояние.

Значит есть возможность сравнения двух состояний и построение дополнительной логики на основе сравнения.

Это позволило реализовать рассылку уведомлений при обнаружении в задачах изменений.

Функции сохранения данных в CouchDB с вычислением изменений реализована в libs/event-emitter/src/issue-cache-writer/redmine-issues-cache-writer.service.ts.

Затем с помощью пайплайнов rxjs реализован дополнительный анализ изменений:

  1. src/notifications/personal-notifications.service.ts - поиск упоминаний пользователей redmine в комментариях для пересылки личных уведомлений в чат-бот
  2. src/notifications/status-change-notifications.service.ts - поиск изменений статусов для рассылки уведомлений согласно изменениям ответственного за дальнейшую работу над задачей
  3. src/changes-cache-writer/changes-cache-writer.service.ts - сохранение изменений в дополнительный журнал активностей в коллекцию в CouchDB

Сам пайплайн rxjs определяется в инициализирующей функции в src/app.module.ts.

Для правильности работы функций анализа нужно выполнить правильно конфигугирование.

Статусы используемые в вашем экземпляре redmine определяются в конфигурационном файле configs/redmine-statuses-config.jsonc. Они имеет следующий вид:

[
  {
    "id": 1,
    "name": "New"
  },
  {
    "id": 2,
    "name": "In Progress"
  },
  {
    "id": 3,
    "name": "Closed",
    "is_closed": true
  }
  // ...
]

Идентификаторы и name должны соответствовать статусам настроенным в основном redmine.

Правила для определения изменений в статусах определяются с помощью конфигурационного файла configs/redmine-status-changes-config.jsonc. Он имеет следующий вид:

[
  {
    "default": false,
    "from": "New",
    "to": "In Progress",
    "messages": [
      {
        "recipient": "<field_name>",
        // Handlebars - template engine
        "changes_message": "{{qa.name}} got issue #{{issue_id}} after development {{dev.name}}",
        "notification_message": "<a href=\"{{ issue_url }}\">{{ issue_tracker }} #{{ issue_id }}</a> {{ issue_subject }}:\n{{dev.name}} finished development. You can test issue.\n\n{{journal_note}}"
      }
      // ...
    ]
  }
  // ...
]

Это набор правил для формирования уведомлений и сообщений для журнала изменений. Поля "from" и "to" - указывают на возможные статусы задачи. "messages" - это набор сообщений. Тут можно определить варианты сообщений для различных получателей задаваемых полем "recipient", а тексты сообщений с помощью шаблонизатора Handlebars.