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

89 lines
2.5 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',
);
}
}
}