From 94fbec0c78751222fbac6e4cb0f1107736ce353f Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:02:05 +0700 Subject: [PATCH] feat: save otp code when reject reconciliation --- .../managers/cancel-reconciliation.manager.ts | 9 +++++++++ .../usecases/reconciliation-data.orchestrator.ts | 3 ++- .../infrastructure/dto/cancel-top-dto.ts | 14 ++++++++++++++ .../reconciliation-data.controller.ts | 8 ++++++-- 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/modules/transaction/reconciliation/infrastructure/dto/cancel-top-dto.ts diff --git a/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts b/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts index 0782fa6..71a71be 100644 --- a/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts +++ b/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts @@ -15,6 +15,12 @@ import { TransactionEntity } from 'src/modules/transaction/transaction/domain/en @Injectable() export class CancelReconciliationManager extends BaseUpdateStatusManager { + protected payloadBody: any; + + setCustomBodyRequest(body) { + this.payloadBody = body; + } + getResult(): string { return `Success active data ${this.result.id}`; } @@ -50,6 +56,7 @@ export class CancelReconciliationManager extends BaseUpdateStatusManager { if (this.data.is_recap_transaction) { Object.assign(this.data, { + otp_code: this.payloadBody?.otp_code, reconciliation_confirm_by: null, reconciliation_confirm_date: null, reconciliation_status: STATUS.PENDING, @@ -58,6 +65,7 @@ export class CancelReconciliationManager extends BaseUpdateStatusManager { + async cancel(dataId, body): Promise { this.cancelManager.setData(dataId, STATUS.REJECTED); this.cancelManager.setService(this.serviceData, TABLE_NAME.TRANSACTION); + this.cancelManager.setCustomBodyRequest(body); await this.cancelManager.execute(); return this.cancelManager.getResult(); } diff --git a/src/modules/transaction/reconciliation/infrastructure/dto/cancel-top-dto.ts b/src/modules/transaction/reconciliation/infrastructure/dto/cancel-top-dto.ts new file mode 100644 index 0000000..042a863 --- /dev/null +++ b/src/modules/transaction/reconciliation/infrastructure/dto/cancel-top-dto.ts @@ -0,0 +1,14 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsString } from 'class-validator'; + +export class OtpVerifyDto { + @ApiProperty({ + name: 'otp_code', + type: String, + required: true, + example: '2345', + }) + @IsString() + @IsNotEmpty() + otp_code: string; +} diff --git a/src/modules/transaction/reconciliation/infrastructure/reconciliation-data.controller.ts b/src/modules/transaction/reconciliation/infrastructure/reconciliation-data.controller.ts index c983d2f..4f76225 100644 --- a/src/modules/transaction/reconciliation/infrastructure/reconciliation-data.controller.ts +++ b/src/modules/transaction/reconciliation/infrastructure/reconciliation-data.controller.ts @@ -16,6 +16,7 @@ import { Public } from 'src/core/guards'; import { TransactionEntity } from '../../transaction/domain/entities/transaction.entity'; import { UpdateReconciliationDto } from './dto/reconciliation.dto'; import { RecapReconciliationDto } from './dto/recap.dto'; +import { OtpVerifyDto } from './dto/cancel-top-dto'; @ApiTags(`${MODULE_NAME.RECONCILIATION.split('-').join(' ')} - data`) @Controller(`v1/${MODULE_NAME.RECONCILIATION}`) @@ -40,8 +41,11 @@ export class ReconciliationDataController { } @Patch(':id/cancel') - async cancel(@Param('id') dataId: string): Promise { - return await this.orchestrator.cancel(dataId); + async cancel( + @Param('id') dataId: string, + @Body() body: OtpVerifyDto, + ): Promise { + return await this.orchestrator.cancel(dataId, body); } @Put('/batch-cancel')