3.9 KiB
Как было описано в документе Сохранение задачи в кеш CouchDB специфика работы с данными из issue такова что есть два состояния - предыдущее и текущее состояние.
Значит есть возможность сравнения двух состояний и построение дополнительной логики на основе сравнения.
Это позволило реализовать рассылку уведомлений при обнаружении в задачах изменений.
Функции сохранения данных в CouchDB с вычислением изменений реализована в libs/event-emitter/src/issue-cache-writer/redmine-issues-cache-writer.service.ts.
Затем с помощью пайплайнов rxjs реализован дополнительный анализ изменений:
src/notifications/personal-notifications.service.ts- поиск упоминаний пользователей redmine в комментариях для пересылки личных уведомлений в чат-ботsrc/notifications/status-change-notifications.service.ts- поиск изменений статусов для рассылки уведомлений согласно изменениям ответственного за дальнейшую работу над задачей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.