fix(SPG-644) Sync ketika privileges di update

pull/37/head
Aswin Ashar Abdullah 2024-07-23 18:25:14 +07:00
parent d81eaac4f6
commit 20848aab3c
6 changed files with 95 additions and 2 deletions

View File

@ -1,5 +1,6 @@
import { validateRelations } from 'src/core/strings/constants/interface.constants'; import { validateRelations } from 'src/core/strings/constants/interface.constants';
import { BaseManager } from '../base.manager'; import { BaseManager } from '../base.manager';
import { OPERATION } from 'src/core/strings/constants/base.constants';
export abstract class BaseCustomManager<Entity> extends BaseManager { export abstract class BaseCustomManager<Entity> extends BaseManager {
protected result: any; protected result: any;
@ -23,4 +24,31 @@ export abstract class BaseCustomManager<Entity> extends BaseManager {
} }
abstract getResult(): any; 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,
}),
]);
}
}
} }

View File

@ -21,6 +21,7 @@ import {
} from './domain/managers/item.handler'; } from './domain/managers/item.handler';
import { import {
UserDeletedHandler, UserDeletedHandler,
UserPrivilegeUpdateHandler,
UserUpdatedHandler, UserUpdatedHandler,
} from './domain/managers/user.handler'; } from './domain/managers/user.handler';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
@ -69,6 +70,7 @@ import { VipCodeCreatedHandler } from './domain/managers/vip-code.handler';
ItemDeletedHandler, ItemDeletedHandler,
UserDeletedHandler, UserDeletedHandler,
UserUpdatedHandler, UserUpdatedHandler,
UserPrivilegeUpdateHandler,
TransactionDataService, TransactionDataService,
UserDataService, UserDataService,

View File

@ -62,7 +62,6 @@ export class CouchService {
const nano = this.nanoInstance; const nano = this.nanoInstance;
const db = nano.use(database); const db = nano.use(database);
const result = await db.get(data.id); const result = await db.get(data.id);
console.log(result, 'dsa');
await db.insert({ await db.insert({
...data, ...data,
_rev: result._rev, _rev: result._rev,

View File

@ -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 { 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 { 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 { 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) @EventsHandler(UserDeletedEvent)
export class UserDeletedHandler implements IEventHandler<UserDeletedEvent> { export class UserDeletedHandler implements IEventHandler<UserDeletedEvent> {
@ -86,3 +87,53 @@ export class UserUpdatedHandler
} }
} }
} }
@EventsHandler(UserPrivilegeConfigUpdatedEvent)
export class UserPrivilegeUpdateHandler
implements IEventHandler<UserPrivilegeConfigUpdatedEvent>
{
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',
);
}
}
}

View File

@ -0,0 +1,5 @@
import { IEvent } from 'src/core/strings/constants/interface.constants';
export class UserPrivilegeConfigUpdatedEvent {
constructor(public readonly data: IEvent) {}
}

View File

@ -6,6 +6,7 @@ import {
} from 'src/core/strings/constants/interface.constants'; } from 'src/core/strings/constants/interface.constants';
import { BaseCustomManager } from 'src/core/modules/domain/usecase/managers/base-custom.manager'; 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 { 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() @Injectable()
export class UpdateUserPrivilegeConfigurationManager extends BaseCustomManager<UserPrivilegeConfigurationEntity> { export class UpdateUserPrivilegeConfigurationManager extends BaseCustomManager<UserPrivilegeConfigurationEntity> {
@ -24,6 +25,8 @@ export class UpdateUserPrivilegeConfigurationManager extends BaseCustomManager<U
{ id: this.data.id }, { id: this.data.id },
this.data, this.data,
); );
this.publishEvents();
return; return;
} }
@ -44,6 +47,11 @@ export class UpdateUserPrivilegeConfigurationManager extends BaseCustomManager<U
} }
get eventTopics(): EventTopics[] { get eventTopics(): EventTopics[] {
return []; return [
{
topic: UserPrivilegeConfigUpdatedEvent,
data: this.data,
},
];
} }
} }