From daef9ccec5245d85382b5fbab57c7484d20a1d84 Mon Sep 17 00:00:00 2001 From: Pavel Gnedov Date: Tue, 8 Nov 2022 08:38:28 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=82=D0=B5=D0=BA=D1=83=D1=89=D0=B5=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + configs/current-user-rules.jsonc.dist | 4 +++ src/configs/app.ts | 3 ++ src/configs/current-user-rules.config.ts | 23 ++++++++++++++++ src/issue-enhancers/current-user-enhancer.ts | 29 +++++++++----------- src/models/app-config.model.ts | 1 + 6 files changed, 45 insertions(+), 16 deletions(-) create mode 100644 configs/current-user-rules.jsonc.dist create mode 100644 src/configs/current-user-rules.config.ts diff --git a/.gitignore b/.gitignore index 8072991..1dce6ce 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ configs/redmine-statuses-config.jsonc configs/redmine-status-changes-config.jsonc configs/eccm-versions-config.jsonc configs/eccm-config.jsonc +configs/current-user-rules.jsonc diff --git a/configs/current-user-rules.jsonc.dist b/configs/current-user-rules.jsonc.dist new file mode 100644 index 0000000..8da3e4e --- /dev/null +++ b/configs/current-user-rules.jsonc.dist @@ -0,0 +1,4 @@ +{ + "New": "", + "*": "" +} \ No newline at end of file diff --git a/src/configs/app.ts b/src/configs/app.ts index 8d5659e..9919b6c 100644 --- a/src/configs/app.ts +++ b/src/configs/app.ts @@ -6,11 +6,13 @@ import { AppConfig } from 'src/models/app-config.model'; import RedmineStatusesConfigLoader from './statuses.config'; import RedmineStatusChangesConfigLoader from './status-changes.config'; import RedmineEccmConfig from './eccm.config'; +import RedmineCurrentUserRulesConfig from './current-user-rules.config'; const redmineIssueEventEmitterConfig = RedmineIssueEventEmitterConfigLoader(); const redmineStatusesConfig = RedmineStatusesConfigLoader(); const redmineStatusChanges = RedmineStatusChangesConfigLoader(); const redmineEccm = RedmineEccmConfig(); +const redmineCurrentUserRules = RedmineCurrentUserRulesConfig(); let appConfig: AppConfig; @@ -33,6 +35,7 @@ export default (): AppConfig => { redmineIssueEventEmitterConfig: redmineIssueEventEmitterConfig, redmineStatusChanges: redmineStatusChanges, redmineEccm: redmineEccm, + redmineCurrentUserRules: redmineCurrentUserRules, }; return appConfig; diff --git a/src/configs/current-user-rules.config.ts b/src/configs/current-user-rules.config.ts new file mode 100644 index 0000000..52e9117 --- /dev/null +++ b/src/configs/current-user-rules.config.ts @@ -0,0 +1,23 @@ +import { join } from 'path'; +import { readFileSync } from 'fs'; +import { parse } from 'jsonc-parser'; + +let currentUserRules: Record; + +export default (): Record => { + if (currentUserRules) { + return currentUserRules; + } + + const userDefinedConfigPath = + process.env['ELTEX_REDMINE_HELPER_CURRENT_USER_RULES_CONFIG_PATH']; + const defaultConfigPath = join('configs', 'current-user-rules.jsonc'); + + const configPath = userDefinedConfigPath || defaultConfigPath; + + const rawData = readFileSync(configPath, { encoding: 'utf-8' }); + + currentUserRules = parse(rawData); + + return currentUserRules; +}; diff --git a/src/issue-enhancers/current-user-enhancer.ts b/src/issue-enhancers/current-user-enhancer.ts index e48e2e0..63045ec 100644 --- a/src/issue-enhancers/current-user-enhancer.ts +++ b/src/issue-enhancers/current-user-enhancer.ts @@ -1,26 +1,23 @@ import { IssueEnhancerInterface } from '@app/event-emitter/issue-enhancers/issue-enhancer-interface'; import { RedmineTypes } from '@app/event-emitter/models/redmine-types'; -import { Injectable } from '@nestjs/common'; +import { Injectable, Logger } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; @Injectable() export class CurrentUserEnhancer implements IssueEnhancerInterface { name = 'current-user'; - // TODO: Переместить правила в конфиг + private rules: Record; + private logger = new Logger(CurrentUserEnhancer.name); - private rules = { - New: 'dev', - 'In Progress': 'dev', - 'Re-opened': 'dev', - 'Code Review': 'cr', - Resolved: 'qa', - Testing: 'qa', - 'Wait Release': 'dev', - Pending: 'dev', - Feedback: 'qa', - Closed: 'dev', - Rejected: 'dev', - }; + constructor(private configService: ConfigService) { + this.rules = this.configService.get>( + 'redmineCurrentUserRules', + ); + this.logger.debug( + `Loaded rules for current user enhancer - ${JSON.stringify(this.rules)}`, + ); + } async enhance( issue: RedmineTypes.Issue, @@ -29,7 +26,7 @@ export class CurrentUserEnhancer implements IssueEnhancerInterface { const status = issue.status.name; - const fieldName = this.rules[status]; + const fieldName = this.rules[status] || this.rules['*'] || null; if (fieldName) { res.current_user = { ...res[fieldName] }; } diff --git a/src/models/app-config.model.ts b/src/models/app-config.model.ts index 3ade525..be968a9 100644 --- a/src/models/app-config.model.ts +++ b/src/models/app-config.model.ts @@ -8,6 +8,7 @@ export type AppConfig = { redmineStatuses: StatusesConfig.Config; redmineStatusChanges: StatusChangesConfig.Config; redmineEccm: EccmConfig.Config; + redmineCurrentUserRules: Record; couchDb: { dbs: { changes: string;