diff --git a/libs/event-emitter/src/event-emitter.module.ts b/libs/event-emitter/src/event-emitter.module.ts index 051a31c..7ad4b8e 100644 --- a/libs/event-emitter/src/event-emitter.module.ts +++ b/libs/event-emitter/src/event-emitter.module.ts @@ -27,9 +27,6 @@ export class EventEmitterModule implements OnModuleInit { return { module: EventEmitterModule, imports: [ - ServeStaticModule.forRoot({ - rootPath: join(__dirname, '..', 'client'), - }), ConfigModule.forRoot({ load: [() => params?.config || MainConfig()] }), ], providers: [ diff --git a/libs/event-emitter/src/models/redmine-types.ts b/libs/event-emitter/src/models/redmine-types.ts index ea06f3e..0777cd5 100644 --- a/libs/event-emitter/src/models/redmine-types.ts +++ b/libs/event-emitter/src/models/redmine-types.ts @@ -33,6 +33,7 @@ export module RedmineTypes { status: IdAndName; priority: IdAndName; author: IdAndName; + assigned_to?: IdAndName; category: IdAndName; fixed_version: IdAndName; subject: string; diff --git a/src/app.module.ts b/src/app.module.ts index 7bc95a5..89bd93a 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -7,18 +7,28 @@ import { ConfigModule } from '@nestjs/config'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import configuration from './configs/app'; +import { CurrentUserEnhancer } from './issue-enhancers/current-user-enhancer'; import { CustomFieldsEnhancer } from './issue-enhancers/custom-fields-enhancer'; @Module({ imports: [ EventEmitterModule.register({ config: configuration().redmineIssueEventEmitterConfig, - enhancers: [new TimestampEnhancer(), new CustomFieldsEnhancer()], + enhancers: [ + new TimestampEnhancer(), + new CustomFieldsEnhancer(), + new CurrentUserEnhancer(), + ], }), ConfigModule.forRoot({ load: [configuration] }), ], controllers: [AppController, MainController], - providers: [AppService, UsersService, CustomFieldsEnhancer], + providers: [ + AppService, + UsersService, + CustomFieldsEnhancer, + CurrentUserEnhancer, + ], }) export class AppModule { constructor( diff --git a/src/issue-enhancers/current-user-enhancer.ts b/src/issue-enhancers/current-user-enhancer.ts new file mode 100644 index 0000000..392619b --- /dev/null +++ b/src/issue-enhancers/current-user-enhancer.ts @@ -0,0 +1,41 @@ +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'; + +@Injectable() +export class CurrentUserEnhancer implements IssueEnhancerInterface { + name = 'current-user'; + + 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', + }; + + init() { + return; + } + + async enhance( + issue: RedmineTypes.Issue, + ): Promise> { + const res: RedmineTypes.Issue & Record = { ...issue }; + + const status = issue.status.name; + + const fieldName = this.rules[status]; + if (fieldName) { + res.current_user = { ...res[fieldName] }; + } + + return res; + } +} diff --git a/src/issue-enhancers/custom-fields-enhancer.ts b/src/issue-enhancers/custom-fields-enhancer.ts index 84f2a98..4473337 100644 --- a/src/issue-enhancers/custom-fields-enhancer.ts +++ b/src/issue-enhancers/custom-fields-enhancer.ts @@ -46,6 +46,14 @@ export class CustomFieldsEnhancer implements IssueEnhancerInterface { } } + const dev = issue.assigned_to; + if (dev && dev.id) { + const devUser = await this.usersService.getUser(dev.id); + if (devUser) { + res.dev = { ...devUser }; + } + } + const tags = customFields.find((cf) => cf.name === 'Tags'); if (tags && tags.value) { res.tags = tags.value.split(/[ ,;]/);