From 20848aab3c2ad0179ca9920ba50a6c1a940df136 Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah Date: Tue, 23 Jul 2024 18:25:14 +0700 Subject: [PATCH] fix(SPG-644) Sync ketika privileges di update --- .../usecase/managers/base-custom.manager.ts | 28 ++++++++++ .../configuration/couch/couch.module.ts | 2 + .../couch/data/services/couch.service.ts | 1 - .../couch/domain/managers/user.handler.ts | 51 +++++++++++++++++++ ...r-privilege-configuration-updated.event.ts | 5 ++ ...te-user-privilege-configuration.manager.ts | 10 +++- 6 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 src/modules/user-related/user-privilege/domain/entities/event/user-privilege-configuration-updated.event.ts diff --git a/src/core/modules/domain/usecase/managers/base-custom.manager.ts b/src/core/modules/domain/usecase/managers/base-custom.manager.ts index 58215f2..f7f1336 100644 --- a/src/core/modules/domain/usecase/managers/base-custom.manager.ts +++ b/src/core/modules/domain/usecase/managers/base-custom.manager.ts @@ -1,5 +1,6 @@ import { validateRelations } from 'src/core/strings/constants/interface.constants'; import { BaseManager } from '../base.manager'; +import { OPERATION } from 'src/core/strings/constants/base.constants'; export abstract class BaseCustomManager extends BaseManager { protected result: any; @@ -23,4 +24,31 @@ export abstract class BaseCustomManager extends BaseManager { } abstract getResult(): any; + + async publishEvents() { + if (!this.eventTopics.length) return; + for (const topic of this.eventTopics) { + let data; + if (!topic.data) { + data = await this.dataService.getOneByOptions({ + where: { + id: this.result['id'], + }, + relations: topic.relations, + }); + } + + this.eventBus.publishAll([ + new topic.topic({ + id: data?.['id'] ?? topic?.data?.['id'], + old: null, + data: data ?? topic.data, + user: this.user, + description: '', + module: this.tableName, + op: OPERATION.UPDATE, + }), + ]); + } + } } diff --git a/src/modules/configuration/couch/couch.module.ts b/src/modules/configuration/couch/couch.module.ts index e3a4b95..b1b8309 100644 --- a/src/modules/configuration/couch/couch.module.ts +++ b/src/modules/configuration/couch/couch.module.ts @@ -21,6 +21,7 @@ import { } from './domain/managers/item.handler'; import { UserDeletedHandler, + UserPrivilegeUpdateHandler, UserUpdatedHandler, } from './domain/managers/user.handler'; import { TypeOrmModule } from '@nestjs/typeorm'; @@ -69,6 +70,7 @@ import { VipCodeCreatedHandler } from './domain/managers/vip-code.handler'; ItemDeletedHandler, UserDeletedHandler, UserUpdatedHandler, + UserPrivilegeUpdateHandler, TransactionDataService, UserDataService, diff --git a/src/modules/configuration/couch/data/services/couch.service.ts b/src/modules/configuration/couch/data/services/couch.service.ts index 59cc403..7225d50 100644 --- a/src/modules/configuration/couch/data/services/couch.service.ts +++ b/src/modules/configuration/couch/data/services/couch.service.ts @@ -62,7 +62,6 @@ export class CouchService { const nano = this.nanoInstance; const db = nano.use(database); const result = await db.get(data.id); - console.log(result, 'dsa'); await db.insert({ ...data, _rev: result._rev, diff --git a/src/modules/configuration/couch/domain/managers/user.handler.ts b/src/modules/configuration/couch/domain/managers/user.handler.ts index 97c8e18..47389d1 100644 --- a/src/modules/configuration/couch/domain/managers/user.handler.ts +++ b/src/modules/configuration/couch/domain/managers/user.handler.ts @@ -5,6 +5,7 @@ import { UserDeletedEvent } from 'src/modules/user-related/user/domain/entities/ import { UserChangeStatusEvent } from 'src/modules/user-related/user/domain/entities/event/user-change-status.event'; import { UserUpdatedEvent } from 'src/modules/user-related/user/domain/entities/event/user-updated.event'; import { UserDataService } from 'src/modules/user-related/user/data/services/user-data.service'; +import { UserPrivilegeConfigUpdatedEvent } from 'src/modules/user-related/user-privilege/domain/entities/event/user-privilege-configuration-updated.event'; @EventsHandler(UserDeletedEvent) export class UserDeletedHandler implements IEventHandler { @@ -86,3 +87,53 @@ export class UserUpdatedHandler } } } + +@EventsHandler(UserPrivilegeConfigUpdatedEvent) +export class UserPrivilegeUpdateHandler + implements IEventHandler +{ + constructor( + private couchService: CouchService, + private userService: UserDataService, + ) {} + + async handle(event: UserPrivilegeConfigUpdatedEvent) { + const data = event.data.data; + + const users = await this.userService + .getManyByOptions({ + where: { + user_privilege_id: data.user_privilege_id, + status: STATUS.ACTIVE, + }, + relations: [ + 'user_privilege', + 'user_privilege.user_privilege_configurations', + ], + }) + .then((items) => { + return items?.map((item) => { + console.log(item, 'dsa'); + const user_privilege_configurations = item[ + 'user_privilege' + ]?.user_privilege_configurations?.filter( + (config) => config.module == 'POS', + ); + Object.assign(item['user_privilege'], { + user_privilege_configurations: user_privilege_configurations, + }); + return item; + }); + }); + + for (const user of users) { + await this.couchService.updateDoc( + { + _id: user.id, + ...user, + }, + 'user', + ); + } + } +} diff --git a/src/modules/user-related/user-privilege/domain/entities/event/user-privilege-configuration-updated.event.ts b/src/modules/user-related/user-privilege/domain/entities/event/user-privilege-configuration-updated.event.ts new file mode 100644 index 0000000..962eea0 --- /dev/null +++ b/src/modules/user-related/user-privilege/domain/entities/event/user-privilege-configuration-updated.event.ts @@ -0,0 +1,5 @@ +import { IEvent } from 'src/core/strings/constants/interface.constants'; + +export class UserPrivilegeConfigUpdatedEvent { + constructor(public readonly data: IEvent) {} +} diff --git a/src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/managers/update-user-privilege-configuration.manager.ts b/src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/managers/update-user-privilege-configuration.manager.ts index d4a22b3..bb55d0a 100644 --- a/src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/managers/update-user-privilege-configuration.manager.ts +++ b/src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/managers/update-user-privilege-configuration.manager.ts @@ -6,6 +6,7 @@ import { } from 'src/core/strings/constants/interface.constants'; import { BaseCustomManager } from 'src/core/modules/domain/usecase/managers/base-custom.manager'; import { UserPrivilegeConfigurationModel } from 'src/modules/user-related/user-privilege/data/models/user-privilege-configuration.model'; +import { UserPrivilegeConfigUpdatedEvent } from '../../../entities/event/user-privilege-configuration-updated.event'; @Injectable() export class UpdateUserPrivilegeConfigurationManager extends BaseCustomManager { @@ -24,6 +25,8 @@ export class UpdateUserPrivilegeConfigurationManager extends BaseCustomManager