64 lines
No EOL
3.9 KiB
Markdown
64 lines
No EOL
3.9 KiB
Markdown
Как было описано в документе [Сохранение задачи в кеш 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": "<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](https://handlebarsjs.com). |