From 1a80051d43e09c73367c3cb16d64f996fcc36546 Mon Sep 17 00:00:00 2001 From: Pavel Gnedov Date: Tue, 19 Jul 2022 18:25:39 +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=20EnhancerService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event-emitter/src/event-emitter.module.ts | 36 ++++--------------- .../src/issue-enhancers/enhancer.service.ts | 30 ++++++++++++++++ .../event-emitter/src/models/redmine-types.ts | 3 +- .../redmine-data-loader.ts | 8 +++-- 4 files changed, 44 insertions(+), 33 deletions(-) create mode 100644 libs/event-emitter/src/issue-enhancers/enhancer.service.ts diff --git a/libs/event-emitter/src/event-emitter.module.ts b/libs/event-emitter/src/event-emitter.module.ts index a2ed0f0..051a31c 100644 --- a/libs/event-emitter/src/event-emitter.module.ts +++ b/libs/event-emitter/src/event-emitter.module.ts @@ -1,10 +1,4 @@ -import { - DynamicModule, - Inject, - Logger, - Module, - OnModuleInit, -} from '@nestjs/common'; +import { DynamicModule, Logger, Module, OnModuleInit } from '@nestjs/common'; import { EventEmitterService } from './event-emitter.service'; import { RedmineEventsGateway } from './events/redmine-events.gateway'; import { ServeStaticModule } from '@nestjs/serve-static'; @@ -24,9 +18,8 @@ import { RedmineTypes } from './models/redmine-types'; import { UsersService } from './users/users.service'; import { IssuesService } from './issues/issues.service'; import { IssuesController } from './issues/issues.controller'; -import { IssueEnhancerInterface } from './issue-enhancers/issue-enhancer-interface'; import { TimestampEnhancer } from './issue-enhancers/timestamps-enhancer'; -import { ModuleRef } from '@nestjs/core'; +import { EnhancerService } from './issue-enhancers/enhancer.service'; @Module({}) export class EventEmitterModule implements OnModuleInit { @@ -55,6 +48,7 @@ export class EventEmitterModule implements OnModuleInit { provide: 'ENHANCERS', useValue: params?.enhancers || null, }, + EnhancerService, ], exports: [ EventEmitterService, @@ -68,6 +62,7 @@ export class EventEmitterModule implements OnModuleInit { UsersService, IssuesService, TimestampEnhancer, + EnhancerService, ], controllers: [MainController, UsersController, IssuesController], }; @@ -78,12 +73,7 @@ export class EventEmitterModule implements OnModuleInit { constructor( private redmineEventsGateway: RedmineEventsGateway, private redmineIssuesCacheWriterService: RedmineIssuesCacheWriterService, - private moduleRef: ModuleRef, - @Inject('ENHANCERS') - private enhancers: IssueEnhancerInterface[], - ) { - this.enhancers.forEach((e) => e.init(this.moduleRef)); - } + ) {} onModuleInit() { const queue = this.redmineEventsGateway.getIssuesChangesQueue(); @@ -92,7 +82,7 @@ export class EventEmitterModule implements OnModuleInit { this.logger.debug(`Changed issues = ${JSON.stringify(issues)}`); for (let i = 0; i < issues.length; i++) { - const issue: RedmineTypes.Issue = await this.enhanceIssue(issues[i]); + const issue: RedmineTypes.Issue = issues[i]; try { this.logger.debug( @@ -114,18 +104,4 @@ export class EventEmitterModule implements OnModuleInit { } }); } - - private async enhanceIssue( - issue: RedmineTypes.Issue & Record, - ): Promise> { - const enhancers = this.enhancers; - for (let i = 0; i < enhancers.length; i++) { - const enhancer = enhancers[i]; - issue = await enhancer.enhance(issue); - this.logger.debug( - `Issue after enhancer: issue = ${JSON.stringify(issue)}`, - ); - } - return issue; - } } diff --git a/libs/event-emitter/src/issue-enhancers/enhancer.service.ts b/libs/event-emitter/src/issue-enhancers/enhancer.service.ts new file mode 100644 index 0000000..03e74b7 --- /dev/null +++ b/libs/event-emitter/src/issue-enhancers/enhancer.service.ts @@ -0,0 +1,30 @@ +import { Inject, Injectable, Logger } from '@nestjs/common'; +import { ModuleRef } from '@nestjs/core'; +import { RedmineTypes } from '../models/redmine-types'; +import { IssueEnhancerInterface } from './issue-enhancer-interface'; + +@Injectable() +export class EnhancerService { + private logger = new Logger(EnhancerService.name); + + constructor( + private moduleRef: ModuleRef, + @Inject('ENHANCERS') + private enhancers: IssueEnhancerInterface[], + ) { + this.enhancers.forEach((e) => e.init(this.moduleRef)); + } + + async enhanceIssue( + issue: RedmineTypes.Issue & Record, + ): Promise> { + for (let i = 0; i < this.enhancers.length; i++) { + const enhancer = this.enhancers[i]; + issue = await enhancer.enhance(issue); + this.logger.debug( + `Issue after enhancer: issue = ${JSON.stringify(issue)}`, + ); + } + return issue; + } +} diff --git a/libs/event-emitter/src/models/redmine-types.ts b/libs/event-emitter/src/models/redmine-types.ts index 09c3587..113a43a 100644 --- a/libs/event-emitter/src/models/redmine-types.ts +++ b/libs/event-emitter/src/models/redmine-types.ts @@ -96,10 +96,11 @@ export module RedmineTypes { mail: string; }; - export function ExtractUser(obj: User): User { + export function ExtractUser(obj: User): User & { name: string } { return { id: obj.id, login: obj.login, + name: `${obj.firstname} ${obj.lastname}`, firstname: obj.firstname, lastname: obj.lastname, mail: obj.mail, diff --git a/libs/event-emitter/src/redmine-data-loader/redmine-data-loader.ts b/libs/event-emitter/src/redmine-data-loader/redmine-data-loader.ts index f116783..a724eb5 100644 --- a/libs/event-emitter/src/redmine-data-loader/redmine-data-loader.ts +++ b/libs/event-emitter/src/redmine-data-loader/redmine-data-loader.ts @@ -2,6 +2,7 @@ import axios from 'axios'; import { Injectable, Logger } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { RedmineTypes } from '../models/redmine-types'; +import { EnhancerService } from '../issue-enhancers/enhancer.service'; @Injectable() export class RedmineDataLoader { @@ -9,7 +10,10 @@ export class RedmineDataLoader { private logger = new Logger(RedmineDataLoader.name); - constructor(private configService: ConfigService) { + constructor( + private configService: ConfigService, + private enhancerService: EnhancerService, + ) { this.urlPrefix = this.configService.get('redmineUrlPrefix'); } @@ -30,7 +34,7 @@ export class RedmineDataLoader { this.logger.debug( `Loaded issue, issueNumber = ${issueNumber}, subject = ${resp.data.issue.subject}`, ); - return resp.data.issue; + return await this.enhancerService.enhanceIssue(resp.data.issue); } async loadUsers(users: number[]): Promise<(RedmineTypes.User | null)[]> {