From 1a65ab7fcad80ffd7c29dea3163edca9dbd5100b Mon Sep 17 00:00:00 2001 From: Pavel Gnedov Date: Mon, 25 Jul 2022 06:44:48 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D0=B0=20sta?= =?UTF-8?q?tus-changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../redmine-status-changes-config.jsonc.dist | 17 ++++++++++++ src/configs/app.ts | 3 +++ src/configs/status-changes.config.ts | 26 +++++++++++++++++++ src/models/app-config.model.ts | 2 ++ src/models/status-changes-config.model.ts | 17 ++++++++++++ 6 files changed, 66 insertions(+) create mode 100644 configs/redmine-status-changes-config.jsonc.dist create mode 100644 src/configs/status-changes.config.ts create mode 100644 src/models/status-changes-config.model.ts diff --git a/.gitignore b/.gitignore index fc2026f..2148fa8 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,4 @@ configs/main-config.jsonc configs/issue-event-emitter-config.jsonc tmp/* configs/redmine-statuses-config.jsonc +configs/redmine-status-changes-config.jsonc diff --git a/configs/redmine-status-changes-config.jsonc.dist b/configs/redmine-status-changes-config.jsonc.dist new file mode 100644 index 0000000..d79d57f --- /dev/null +++ b/configs/redmine-status-changes-config.jsonc.dist @@ -0,0 +1,17 @@ +[ + { + "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}}" + } + // ... + ] + } + // ... +] \ No newline at end of file diff --git a/src/configs/app.ts b/src/configs/app.ts index ae976fb..1177c8b 100644 --- a/src/configs/app.ts +++ b/src/configs/app.ts @@ -4,9 +4,11 @@ import { join } from 'path'; import { parse } from 'jsonc-parser'; import { AppConfig } from 'src/models/app-config.model'; import RedmineStatusesConfigLoader from './statuses.config'; +import RedmineStatusChangesConfigLoader from './status-changes.config'; const redmineIssueEventEmitterConfig = RedmineIssueEventEmitterConfigLoader(); const redmineStatusesConfig = RedmineStatusesConfigLoader(); +const redmineStatusChanges = RedmineStatusChangesConfigLoader(); let appConfig: AppConfig; @@ -27,6 +29,7 @@ export default (): AppConfig => { ...data, redmineStatuses: redmineStatusesConfig, redmineIssueEventEmitterConfig: redmineIssueEventEmitterConfig, + redmineStatusChanges: redmineStatusChanges, }; return appConfig; diff --git a/src/configs/status-changes.config.ts b/src/configs/status-changes.config.ts new file mode 100644 index 0000000..1035e6b --- /dev/null +++ b/src/configs/status-changes.config.ts @@ -0,0 +1,26 @@ +import { readFileSync } from 'fs'; +import { join } from 'path'; +import { StatusChangesConfig } from 'src/models/status-changes-config.model'; +import { parse } from 'jsonc-parser'; + +let statusChanges: StatusChangesConfig.Config; + +export default (): StatusChangesConfig.Config => { + if (statusChanges) { + return statusChanges; + } + + const userDefinedConfigPath = + process.env['ELTEX_REDMINE_HELPER_STATUS_CHANGES_CONFIG_PATH']; + const defaultConfigPath = join( + 'configs', + 'redmine-status-changes-config.jsonc', + ); + const configPath = userDefinedConfigPath || defaultConfigPath; + + const rawData = readFileSync(configPath, { encoding: 'utf-8' }); + + statusChanges = parse(rawData); + + return statusChanges; +}; diff --git a/src/models/app-config.model.ts b/src/models/app-config.model.ts index 4662d3a..de21ac0 100644 --- a/src/models/app-config.model.ts +++ b/src/models/app-config.model.ts @@ -1,9 +1,11 @@ import { MainConfigModel } from '@app/event-emitter/models/main-config-model'; +import { StatusChangesConfig } from './status-changes-config.model'; import { StatusesConfig } from './statuses-config.model'; export type AppConfig = { redmineIssueEventEmitterConfig: MainConfigModel; redmineStatuses: StatusesConfig.Config; + redmineStatusChanges: StatusChangesConfig.Config; couchDb: { dbs: { changes: string; diff --git a/src/models/status-changes-config.model.ts b/src/models/status-changes-config.model.ts new file mode 100644 index 0000000..43369f8 --- /dev/null +++ b/src/models/status-changes-config.model.ts @@ -0,0 +1,17 @@ +/* eslint-disable @typescript-eslint/no-namespace */ +export namespace StatusChangesConfig { + export type Message = { + recipient: string; + changes_message: string; + notification_message: string; + }; + + export type Item = { + default: boolean; + from: string; + to: string; + messages: Message[]; + }; + + export type Config = Item[]; +}