diff --git a/src/modules/configuration/midtrans/data/services/midtrans.service.ts b/src/modules/configuration/midtrans/data/services/midtrans.service.ts index fbd328c..2dfad1b 100644 --- a/src/modules/configuration/midtrans/data/services/midtrans.service.ts +++ b/src/modules/configuration/midtrans/data/services/midtrans.service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common'; import { EventBus } from '@nestjs/cqrs'; import { mappingMidtransTransaction } from '../../domain/usecases/helpers/mapping-transaction.helper'; import { Snap } from 'midtrans-client'; +import { MidtransStatus } from '../../domain/entities/midtrans-callback.event'; @Injectable() export class MidtransService { @@ -19,8 +20,8 @@ export class MidtransService { return await this.midtransInstance.transaction.status(orderId); } - async cancelOrder(orderId: string): Promise { - return await this.midtransInstance.transaction.cancel(orderId); + async changeStatus(orderId: string, action: MidtransStatus): Promise { + return await this.midtransInstance.transaction[action](orderId); } async create(body): Promise { diff --git a/src/modules/configuration/midtrans/domain/entities/midtrans-callback.event.ts b/src/modules/configuration/midtrans/domain/entities/midtrans-callback.event.ts index 0b77294..b42f0e2 100644 --- a/src/modules/configuration/midtrans/domain/entities/midtrans-callback.event.ts +++ b/src/modules/configuration/midtrans/domain/entities/midtrans-callback.event.ts @@ -6,3 +6,10 @@ export interface IEventMidtrans { id: string; data: any; } + +export enum MidtransStatus { + approve = 'approve', + deny = 'deny', + cancel = 'cancel', + expire = 'expire', +} diff --git a/src/modules/configuration/midtrans/infrastructure/midtrans.controller.ts b/src/modules/configuration/midtrans/infrastructure/midtrans.controller.ts index 17df4cf..fe68649 100644 --- a/src/modules/configuration/midtrans/infrastructure/midtrans.controller.ts +++ b/src/modules/configuration/midtrans/infrastructure/midtrans.controller.ts @@ -1,9 +1,21 @@ -import { Body, Controller, Get, Injectable, Param, Post } from '@nestjs/common'; -import { ApiTags } from '@nestjs/swagger'; +import { + Body, + Controller, + Get, + Injectable, + Param, + Post, + Query, + UnprocessableEntityException, +} from '@nestjs/common'; +import { ApiQuery, ApiTags } from '@nestjs/swagger'; import { Public } from 'src/core/guards'; import { MidtransService } from '../data/services/midtrans.service'; import { EventBus } from '@nestjs/cqrs'; -import { MidtransCallbackEvent } from '../domain/entities/midtrans-callback.event'; +import { + MidtransCallbackEvent, + MidtransStatus, +} from '../domain/entities/midtrans-callback.event'; import { MidtransDto } from './dto/midtrans.dto'; @ApiTags(`midtrans`) @@ -34,14 +46,20 @@ export class MidtransController { } } - @Get(':id/cancel') - async cancel(@Param('id') id: string) { + @Get(':id/change-status') + @ApiQuery({ name: 'status', enum: MidtransStatus }) + async cancel( + @Param('id') id: string, + @Query('status') status = MidtransStatus.cancel, + ) { try { - const data = await this.dataService.cancelOrder(id); - return data; + return await this.dataService.changeStatus(id, status); } catch (error) { - console.log(error.message); - throw new Error('Gagal update status transaksi'); + const data = + error.ApiResponse?.status_message ?? + error.message ?? + 'Gagal update status transaksi'; + throw new UnprocessableEntityException(data); } }