3.2 KiB
Для разрешения некоторых проблем напрашивалось попутно после получения данных об issue из redmine делать преобразования
Примеры:
- Преобразовать дату+вермя из текстового формата в числовой для возможности фильтрации данных с помощью сравнивающих операторов - больше и меньше.
- Привести текстовое значение тегов к массиву для фильтрации данных с помощью оператора "$in".
- Можно извлечь из описания и комментариев ссылки на MR-ы в gitlab-е.
- Определить текущего ответственного за задачу по правилам соответствия статусу одному из полей - "Назначено", "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. Упрощённый код, отражающий суть:
export class AppModule {
// ...
onModuleInit() {
// ...
this.enhancerService.addEnhancer([
this.timestampEnhancer,
this.customFieldsEnhancer,
this.currentUserEnhancer,
this.issueUrlEnhancer,
this.categoryMergeToTagsEnhancer,
this.calendarEnhancer,
]);
// ...
}
// ...
}
Схематически процесс можно проиллюстрировать так:
Выполнение преобразований данных до сохранения в кеш в CouchDB позволяет в последствии использовать дополнительные данные для выборки задач
