Добавлен EnhancerService
This commit is contained in:
parent
2cf5ccf118
commit
1a80051d43
4 changed files with 44 additions and 33 deletions
|
|
@ -1,10 +1,4 @@
|
||||||
import {
|
import { DynamicModule, Logger, Module, OnModuleInit } from '@nestjs/common';
|
||||||
DynamicModule,
|
|
||||||
Inject,
|
|
||||||
Logger,
|
|
||||||
Module,
|
|
||||||
OnModuleInit,
|
|
||||||
} from '@nestjs/common';
|
|
||||||
import { EventEmitterService } from './event-emitter.service';
|
import { EventEmitterService } from './event-emitter.service';
|
||||||
import { RedmineEventsGateway } from './events/redmine-events.gateway';
|
import { RedmineEventsGateway } from './events/redmine-events.gateway';
|
||||||
import { ServeStaticModule } from '@nestjs/serve-static';
|
import { ServeStaticModule } from '@nestjs/serve-static';
|
||||||
|
|
@ -24,9 +18,8 @@ import { RedmineTypes } from './models/redmine-types';
|
||||||
import { UsersService } from './users/users.service';
|
import { UsersService } from './users/users.service';
|
||||||
import { IssuesService } from './issues/issues.service';
|
import { IssuesService } from './issues/issues.service';
|
||||||
import { IssuesController } from './issues/issues.controller';
|
import { IssuesController } from './issues/issues.controller';
|
||||||
import { IssueEnhancerInterface } from './issue-enhancers/issue-enhancer-interface';
|
|
||||||
import { TimestampEnhancer } from './issue-enhancers/timestamps-enhancer';
|
import { TimestampEnhancer } from './issue-enhancers/timestamps-enhancer';
|
||||||
import { ModuleRef } from '@nestjs/core';
|
import { EnhancerService } from './issue-enhancers/enhancer.service';
|
||||||
|
|
||||||
@Module({})
|
@Module({})
|
||||||
export class EventEmitterModule implements OnModuleInit {
|
export class EventEmitterModule implements OnModuleInit {
|
||||||
|
|
@ -55,6 +48,7 @@ export class EventEmitterModule implements OnModuleInit {
|
||||||
provide: 'ENHANCERS',
|
provide: 'ENHANCERS',
|
||||||
useValue: params?.enhancers || null,
|
useValue: params?.enhancers || null,
|
||||||
},
|
},
|
||||||
|
EnhancerService,
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
EventEmitterService,
|
EventEmitterService,
|
||||||
|
|
@ -68,6 +62,7 @@ export class EventEmitterModule implements OnModuleInit {
|
||||||
UsersService,
|
UsersService,
|
||||||
IssuesService,
|
IssuesService,
|
||||||
TimestampEnhancer,
|
TimestampEnhancer,
|
||||||
|
EnhancerService,
|
||||||
],
|
],
|
||||||
controllers: [MainController, UsersController, IssuesController],
|
controllers: [MainController, UsersController, IssuesController],
|
||||||
};
|
};
|
||||||
|
|
@ -78,12 +73,7 @@ export class EventEmitterModule implements OnModuleInit {
|
||||||
constructor(
|
constructor(
|
||||||
private redmineEventsGateway: RedmineEventsGateway,
|
private redmineEventsGateway: RedmineEventsGateway,
|
||||||
private redmineIssuesCacheWriterService: RedmineIssuesCacheWriterService,
|
private redmineIssuesCacheWriterService: RedmineIssuesCacheWriterService,
|
||||||
private moduleRef: ModuleRef,
|
) {}
|
||||||
@Inject('ENHANCERS')
|
|
||||||
private enhancers: IssueEnhancerInterface[],
|
|
||||||
) {
|
|
||||||
this.enhancers.forEach((e) => e.init(this.moduleRef));
|
|
||||||
}
|
|
||||||
|
|
||||||
onModuleInit() {
|
onModuleInit() {
|
||||||
const queue = this.redmineEventsGateway.getIssuesChangesQueue();
|
const queue = this.redmineEventsGateway.getIssuesChangesQueue();
|
||||||
|
|
@ -92,7 +82,7 @@ export class EventEmitterModule implements OnModuleInit {
|
||||||
this.logger.debug(`Changed issues = ${JSON.stringify(issues)}`);
|
this.logger.debug(`Changed issues = ${JSON.stringify(issues)}`);
|
||||||
|
|
||||||
for (let i = 0; i < issues.length; i++) {
|
for (let i = 0; i < issues.length; i++) {
|
||||||
const issue: RedmineTypes.Issue = await this.enhanceIssue(issues[i]);
|
const issue: RedmineTypes.Issue = issues[i];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.logger.debug(
|
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;
|
mail: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function ExtractUser(obj: User): User {
|
export function ExtractUser(obj: User): User & { name: string } {
|
||||||
return {
|
return {
|
||||||
id: obj.id,
|
id: obj.id,
|
||||||
login: obj.login,
|
login: obj.login,
|
||||||
|
name: `${obj.firstname} ${obj.lastname}`,
|
||||||
firstname: obj.firstname,
|
firstname: obj.firstname,
|
||||||
lastname: obj.lastname,
|
lastname: obj.lastname,
|
||||||
mail: obj.mail,
|
mail: obj.mail,
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import axios from 'axios';
|
||||||
import { Injectable, Logger } from '@nestjs/common';
|
import { Injectable, Logger } from '@nestjs/common';
|
||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { RedmineTypes } from '../models/redmine-types';
|
import { RedmineTypes } from '../models/redmine-types';
|
||||||
|
import { EnhancerService } from '../issue-enhancers/enhancer.service';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RedmineDataLoader {
|
export class RedmineDataLoader {
|
||||||
|
|
@ -9,7 +10,10 @@ export class RedmineDataLoader {
|
||||||
|
|
||||||
private logger = new Logger(RedmineDataLoader.name);
|
private logger = new Logger(RedmineDataLoader.name);
|
||||||
|
|
||||||
constructor(private configService: ConfigService) {
|
constructor(
|
||||||
|
private configService: ConfigService,
|
||||||
|
private enhancerService: EnhancerService,
|
||||||
|
) {
|
||||||
this.urlPrefix = this.configService.get<string>('redmineUrlPrefix');
|
this.urlPrefix = this.configService.get<string>('redmineUrlPrefix');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -30,7 +34,7 @@ export class RedmineDataLoader {
|
||||||
this.logger.debug(
|
this.logger.debug(
|
||||||
`Loaded issue, issueNumber = ${issueNumber}, subject = ${resp.data.issue.subject}`,
|
`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)[]> {
|
async loadUsers(users: number[]): Promise<(RedmineTypes.User | null)[]> {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue