41 lines
No EOL
3.2 KiB
Markdown
41 lines
No EOL
3.2 KiB
Markdown
Для разрешения некоторых проблем напрашивалось попутно после получения данных об issue из redmine делать преобразования
|
||
|
||
Примеры:
|
||
|
||
1. Преобразовать дату+вермя из текстового формата в числовой для возможности фильтрации данных с помощью сравнивающих операторов - больше и меньше.
|
||
2. Привести текстовое значение тегов к массиву для фильтрации данных с помощью оператора "$in".
|
||
3. Можно извлечь из описания и комментариев ссылки на MR-ы в gitlab-е.
|
||
4. Определить текущего ответственного за задачу по правилам соответствия статусу одному из полей - "Назначено", "Code Reviewer", "Quality Assurance".
|
||
|
||
Через конфигурационный файл уже не решить настройку, т.к. за преобразования задач отвечают функции - а если точнее то классы с реализацией интерфейса `IssueEnhancerInterface`. Это делается в коде проекта Pinkmine. Примеры реализаций в файлах:
|
||
|
||
- `libs/event-emitter/src/issue-enhancers/timestamps-enhancer.ts` - преобразует дату+время из текстового формата в числовой
|
||
- `libs/event-emitter/src/issue-enhancers` - в папке ещё несколько универсальных примеров (не зависящих от экземпляра redmine)
|
||
- `src/issue-enhancers` - в папке лежат дополнительные примеры с функциями уже привязанными к рабочему redmine и специфичные для рабочих проектов
|
||
|
||
Чтобы эти функции отрабатывали налету после получения данных из redmine и перед сохранением в кеш, то нужно при начальной инициализации приложения (`src/app.module.ts` > `AppModule.onModuleInit`) указать набор реализаций `IssueEnhancerInterface`. Упрощённый код, отражающий суть:
|
||
|
||
```ts
|
||
export class AppModule {
|
||
// ...
|
||
onModuleInit() {
|
||
// ...
|
||
this.enhancerService.addEnhancer([
|
||
this.timestampEnhancer,
|
||
this.customFieldsEnhancer,
|
||
this.currentUserEnhancer,
|
||
this.issueUrlEnhancer,
|
||
this.categoryMergeToTagsEnhancer,
|
||
this.calendarEnhancer,
|
||
]);
|
||
// ...
|
||
}
|
||
// ...
|
||
}
|
||
```
|
||
|
||
Схематически процесс можно проиллюстрировать так:
|
||
|
||

|
||
|
||
Выполнение преобразований данных до сохранения в кеш в CouchDB позволяет в последствии использовать дополнительные данные для выборки задач |