Как было описано в документе [Сохранение задачи в кеш CouchDB](./Сохранение%20задачи%20в%20кеш%20CouchDB.md) специфика работы с данными из 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`. Они имеет следующий вид: ```json [ { "id": 1, "name": "New" }, { "id": 2, "name": "In Progress" }, { "id": 3, "name": "Closed", "is_closed": true } // ... ] ``` Идентификаторы и name должны соответствовать статусам настроенным в основном redmine. Правила для определения изменений в статусах определяются с помощью конфигурационного файла `configs/redmine-status-changes-config.jsonc`. Он имеет следующий вид: ```json [ { "default": false, "from": "New", "to": "In Progress", "messages": [ { "recipient": "", // Handlebars - template engine "changes_message": "{{qa.name}} got issue #{{issue_id}} after development {{dev.name}}", "notification_message": "{{ issue_tracker }} #{{ issue_id }} {{ issue_subject }}:\n{{dev.name}} finished development. You can test issue.\n\n{{journal_note}}" } // ... ] } // ... ] ``` Это набор правил для формирования уведомлений и сообщений для журнала изменений. Поля "from" и "to" - указывают на возможные статусы задачи. "messages" - это набор сообщений. Тут можно определить варианты сообщений для различных получателей задаваемых полем "recipient", а тексты сообщений с помощью шаблонизатора [Handlebars](https://handlebarsjs.com).