pos-be/src/modules/configuration/couch/domain/managers/user.handler.ts

83 lines
2.7 KiB
TypeScript

import { EventsHandler, IEventHandler } from "@nestjs/cqrs";
import { CouchService } from "../../data/services/couch.service";
import { STATUS } from "src/core/strings/constants/base.constants";
import { UserDeletedEvent } from "src/modules/user-related/user/domain/entities/event/user-deleted.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 { UserDataService } from "src/modules/user-related/user/data/services/user-data.service";
@EventsHandler(UserDeletedEvent)
export class UserDeletedHandler implements IEventHandler<UserDeletedEvent> {
constructor(
private couchService: CouchService
) { }
async handle(event: UserDeletedEvent) {
const data = await this.couchService.deleteDoc({
_id: event.data.id,
...event.data.data
}, 'user');
}
}
@EventsHandler(UserChangeStatusEvent, UserUpdatedEvent)
export class UserUpdatedHandler implements IEventHandler<UserChangeStatusEvent> {
constructor(
private couchService: CouchService,
private userService: UserDataService,
) { }
async handle(event: UserChangeStatusEvent) {
const dataOld = event.data.old;
const data = event.data.data;
const user = await this.userService.getOneByOptions({
where: {
id: data.id
},
relations: [
'user_privilege',
'user_privilege.user_privilege_configurations'
]
}).then(item => {
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
})
// change status to active
if (dataOld?.status != data.status && data.status == STATUS.ACTIVE) {
await this.couchService.createDoc(
{
_id: data.id,
...user
},
'user'
);
}
else if (dataOld?.status != data.status) {
await this.couchService.deleteDoc(
{
_id: data.id,
...user
},
'user'
);
}
// update
else {
await this.couchService.updateDoc(
{
_id: data.id,
...user
},
'user'
);
}
}
}