From 4e31ebaafd6dbc764ad4049e3c8a1fd8c7f13114 Mon Sep 17 00:00:00 2001 From: Pavel Gnedov Date: Mon, 18 Jul 2022 13:54:16 +0700 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BC=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=D0=BB=D1=8F=20event-emitter=20=D0=BD=D0=B0=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event-emitter/src/event-emitter.module.ts | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/libs/event-emitter/src/event-emitter.module.ts b/libs/event-emitter/src/event-emitter.module.ts index f2cc727..29e6448 100644 --- a/libs/event-emitter/src/event-emitter.module.ts +++ b/libs/event-emitter/src/event-emitter.module.ts @@ -1,4 +1,4 @@ -import { DynamicModule, Module } 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'; @@ -12,9 +12,10 @@ import { RedmineIssuesCacheWriterService } from './issue-cache-writer/redmine-is import { CouchDb } from './couchdb-datasources/couchdb'; import { Users } from './couchdb-datasources/users'; import { Issues } from './couchdb-datasources/issues'; +import { RedmineTypes } from '@app/redmine-types/index'; @Module({}) -export class EventEmitterModule { +export class EventEmitterModule implements OnModuleInit { static register(params?: ModuleParams): DynamicModule { return { module: EventEmitterModule, @@ -45,4 +46,41 @@ export class EventEmitterModule { controllers: [MainController], }; } + + private logger = new Logger(EventEmitterModule.name); + + constructor( + private redmineEventsGateway: RedmineEventsGateway, + private redmineIssuesCacheWriterService: RedmineIssuesCacheWriterService, + ) {} + + onModuleInit() { + const queue = this.redmineEventsGateway.getIssuesChangesQueue(); + const subj = queue.queue; + subj.subscribe(async (issues: any) => { + this.logger.debug(`Changed issues = ${JSON.stringify(issues)}`); + + for (let i = 0; i < issues.length; i++) { + const issue: RedmineTypes.Issue = issues[i]; + + try { + this.logger.debug( + `Save issue #${issue.id} - ${JSON.stringify(issue)}`, + ); + + const response = await this.redmineIssuesCacheWriterService.saveIssue( + issue, + ); + + this.logger.debug( + `Save issue #${issue.id} response = ${JSON.stringify(response)}`, + ); + } catch (ex) { + this.logger.error(`Saving issue error - ${ex}`, null, { + issue: issue, + }); + } + } + }); + } }