From 28dcac39f07b9a73e4b10ad9be36af9c8b9af136 Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah Date: Tue, 9 Jul 2024 17:52:04 +0700 Subject: [PATCH 1/2] feat(SPG-405) DB Kode Diskon VIP --- .../usecase/managers/base-create.manager.ts | 14 ++++++- src/modules/configuration/couch/constants.ts | 2 +- .../configuration/couch/couch.module.ts | 2 + .../couch/domain/managers/vip-code.handler.ts | 22 ++++++++++ .../managers/index-reconciliation.manager.ts | 1 + .../handlers/create-vip-code.handler.ts | 40 +++++++++++++++++++ .../managers/create-vip-code.manager.ts | 2 +- .../transaction/vip-code/vip-code.module.ts | 5 +++ 8 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 src/modules/configuration/couch/domain/managers/vip-code.handler.ts create mode 100644 src/modules/transaction/vip-code/domain/usecases/handlers/create-vip-code.handler.ts diff --git a/src/core/modules/domain/usecase/managers/base-create.manager.ts b/src/core/modules/domain/usecase/managers/base-create.manager.ts index fdfb694..c30052d 100644 --- a/src/core/modules/domain/usecase/managers/base-create.manager.ts +++ b/src/core/modules/domain/usecase/managers/base-create.manager.ts @@ -75,11 +75,21 @@ export abstract class BaseCreateManager extends BaseManager { 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: this.result['id'], + id: data?.['id'] ?? topic?.data?.['id'], old: null, - data: topic.data, + data: data ?? topic.data, user: this.user, description: '', module: this.tableName, diff --git a/src/modules/configuration/couch/constants.ts b/src/modules/configuration/couch/constants.ts index c3045f2..031c3c4 100644 --- a/src/modules/configuration/couch/constants.ts +++ b/src/modules/configuration/couch/constants.ts @@ -1 +1 @@ -export const DatabaseListen = ['transaction']; +export const DatabaseListen = ['transaction', 'vip_code']; diff --git a/src/modules/configuration/couch/couch.module.ts b/src/modules/configuration/couch/couch.module.ts index 18e2cea..e3a4b95 100644 --- a/src/modules/configuration/couch/couch.module.ts +++ b/src/modules/configuration/couch/couch.module.ts @@ -37,6 +37,7 @@ import { TransactionDataService } from 'src/modules/transaction/transaction/data import { TransactionModel } from 'src/modules/transaction/transaction/data/models/transaction.model'; import { TransactionTaxModel } from 'src/modules/transaction/transaction/data/models/transaction-tax.model'; import { TransactionItemModel } from 'src/modules/transaction/transaction/data/models/transaction-item.model'; +import { VipCodeCreatedHandler } from './domain/managers/vip-code.handler'; @Module({ imports: [ @@ -59,6 +60,7 @@ import { TransactionItemModel } from 'src/modules/transaction/transaction/data/m BookingDeletedEvent, PaymentMethodDeletedHandler, PaymentMethodUpdatedHandler, + VipCodeCreatedHandler, VipCategoryDeletedHandler, VipCategoryUpdatedHandler, SeasonPeriodDeletedHandler, diff --git a/src/modules/configuration/couch/domain/managers/vip-code.handler.ts b/src/modules/configuration/couch/domain/managers/vip-code.handler.ts new file mode 100644 index 0000000..7efef35 --- /dev/null +++ b/src/modules/configuration/couch/domain/managers/vip-code.handler.ts @@ -0,0 +1,22 @@ +import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; +import { CouchService } from '../../data/services/couch.service'; +import { VipCodeCreatedEvent } from 'src/modules/transaction/vip-code/domain/entities/event/vip-code-created.event'; + +@EventsHandler(VipCodeCreatedEvent) +export class VipCodeCreatedHandler + implements IEventHandler +{ + constructor(private couchService: CouchService) {} + + async handle(event: VipCodeCreatedEvent) { + const data = event.data.data; + + await this.couchService.createDoc( + { + _id: data.id, + ...data, + }, + 'vip_code', + ); + } +} diff --git a/src/modules/transaction/reconciliation/domain/usecases/managers/index-reconciliation.manager.ts b/src/modules/transaction/reconciliation/domain/usecases/managers/index-reconciliation.manager.ts index 6fc6ec5..6eba3a6 100644 --- a/src/modules/transaction/reconciliation/domain/usecases/managers/index-reconciliation.manager.ts +++ b/src/modules/transaction/reconciliation/domain/usecases/managers/index-reconciliation.manager.ts @@ -45,6 +45,7 @@ export class IndexReconciliationManager extends BaseIndexManager { + constructor( + private dataService: VipCodeDataService, + private couchService: CouchService, + ) {} + + async handle(event: ChangeDocEvent) { + const database = event.data.database; + const data = event.data.data; + + if (database != 'vip_code') return; + + const queryRunner = this.dataService + .getRepository() + .manager.connection.createQueryRunner(); + + // jika delete + if (data._deleted ?? false) { + } else { + const dataMapped = { + ...data, + id: data._id ?? data.id, + vip_category_id: data.vip_category?._id ?? data.vip_category?.id, + }; + + try { + await this.dataService.create(queryRunner, VipCodeModel, dataMapped); + } catch (error) { + await this.couchService.createDoc(data, 'error_vip_code'); + } + } + } +} diff --git a/src/modules/transaction/vip-code/domain/usecases/managers/create-vip-code.manager.ts b/src/modules/transaction/vip-code/domain/usecases/managers/create-vip-code.manager.ts index 947e65c..e235821 100644 --- a/src/modules/transaction/vip-code/domain/usecases/managers/create-vip-code.manager.ts +++ b/src/modules/transaction/vip-code/domain/usecases/managers/create-vip-code.manager.ts @@ -35,7 +35,7 @@ export class CreateVipCodeManager extends BaseCreateManager { return [ { topic: VipCodeCreatedEvent, - data: this.data, + relations: ['vip_category'], }, ]; } diff --git a/src/modules/transaction/vip-code/vip-code.module.ts b/src/modules/transaction/vip-code/vip-code.module.ts index 68f7dd1..e3b98ca 100644 --- a/src/modules/transaction/vip-code/vip-code.module.ts +++ b/src/modules/transaction/vip-code/vip-code.module.ts @@ -13,6 +13,8 @@ import { CqrsModule } from '@nestjs/cqrs'; import { IndexVipCodeManager } from './domain/usecases/managers/index-vip-code.manager'; import { VipCodeModel } from './data/models/vip-code.model'; import { GenerateVipCodeManager } from './domain/usecases/managers/geneate-vip-code.manager'; +import { CreateVipCodeHandler } from './domain/usecases/handlers/create-vip-code.handler'; +import { CouchService } from 'src/modules/configuration/couch/data/services/couch.service'; @Module({ imports: [ @@ -22,10 +24,13 @@ import { GenerateVipCodeManager } from './domain/usecases/managers/geneate-vip-c ], controllers: [VipCodeDataController, VipCodeReadController], providers: [ + CreateVipCodeHandler, + IndexVipCodeManager, CreateVipCodeManager, GenerateVipCodeManager, + CouchService, VipCodeDataService, VipCodeReadService, From 99847ce85b3e2329d56d8045ed8804c7713bd60e Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah Date: Tue, 9 Jul 2024 17:52:46 +0700 Subject: [PATCH 2/2] fix(SPG-593) Pemesanan - Update Pembayaran Pending - Tambahkan informasi pembayaran via dan no rekening --- .../usecases/managers/helpers/mapping-transaction.helper.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts b/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts index 258cf72..bc2bab6 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts @@ -99,6 +99,10 @@ export function mappingRevertTransaction(data, type) { season_period_name: data.season_period?.holiday_name ?? null, season_period_type_id: data.season_period?.season_type?.id ?? null, season_period_type_name: data.season_period?.season_type?.name ?? null, + payment_type_method_id: data.payment_type_method?.id, + payment_type_method_number: data.payment_type_method?.account_number, + payment_type_method_name: data.payment_type_method?.issuer_name, + payment_type_method_qr: data.payment_type_method?.qr_image, }); data.items?.map((item) => {