Добавлен EnhancerService
This commit is contained in:
parent
2cf5ccf118
commit
1a80051d43
4 changed files with 44 additions and 33 deletions
|
|
@ -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<string, any>,
|
||||
): Promise<RedmineTypes.Issue & Record<string, any>> {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
30
libs/event-emitter/src/issue-enhancers/enhancer.service.ts
Normal file
30
libs/event-emitter/src/issue-enhancers/enhancer.service.ts
Normal file
|
|
@ -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<string, any>,
|
||||
): Promise<RedmineTypes.Issue & Record<string, any>> {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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<string>('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)[]> {
|
||||
|
|
|
|||
Loading…
Reference in a new issue