Merge pull request 'feat: save otp code when reject reconciliation' (#149) from feat/otp-cancel into development

Reviewed-on: #149
pull/157/head 1.6.13-alpha.1
firmanr 2025-06-10 16:16:07 +07:00
commit 4e2ec4d94f
4 changed files with 31 additions and 3 deletions

View File

@ -15,6 +15,12 @@ import { TransactionEntity } from 'src/modules/transaction/transaction/domain/en
@Injectable()
export class CancelReconciliationManager extends BaseUpdateStatusManager<TransactionEntity> {
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<Transac
async beforeProcess(): Promise<void> {
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<Transac
});
} else {
Object.assign(this.data, {
otp_code: this.payloadBody?.otp_code,
reconciliation_mdr: this.data.reconciliation_mdr ?? null,
reconciliation_confirm_by: this.user.name,
reconciliation_confirm_date: new Date().getTime(),
@ -70,6 +78,7 @@ export class CancelReconciliationManager extends BaseUpdateStatusManager<Transac
: this.data.settlement_date,
});
}
return;
}

View File

@ -58,9 +58,10 @@ export class ReconciliationDataOrchestrator {
return this.batchConfirmManager.getResult();
}
async cancel(dataId): Promise<string> {
async cancel(dataId, body): Promise<string> {
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();
}

View File

@ -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;
}

View File

@ -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<string> {
return await this.orchestrator.cancel(dataId);
async cancel(
@Param('id') dataId: string,
@Body() body: OtpVerifyDto,
): Promise<string> {
return await this.orchestrator.cancel(dataId, body);
}
@Put('/batch-cancel')