pinkmine/docs/Как это работает/Как происходит преобразование задачи.md

3.2 KiB
Raw Blame History

Для разрешения некоторых проблем напрашивалось попутно после получения данных об 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. Упрощённый код, отражающий суть:

export class AppModule {
  // ...
  onModuleInit() {
    // ...
    this.enhancerService.addEnhancer([
      this.timestampEnhancer,
      this.customFieldsEnhancer,
      this.currentUserEnhancer,
      this.issueUrlEnhancer,
      this.categoryMergeToTagsEnhancer,
      this.calendarEnhancer,
    ]);
    // ...
  }
  // ...
}

Схематически процесс можно проиллюстрировать так:

Преобразования задач

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