import { Body, Controller, Get, Injectable, Param, Post } from '@nestjs/common'; import { 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 { MidtransDto } from './dto/midtrans.dto'; @ApiTags(`midtrans`) @Controller('v1/midtrans') @Public() @Injectable() export class MidtransController { constructor( private dataService: MidtransService, private eventBus: EventBus, ) {} @Get(':id/status') async getStatus(@Param('id') id: string) { return await this.dataService.getStatus(id); } @Post('callback') async callback(@Body() callback: MidtransDto) { const data = await this.dataService.getStatus(callback?.order_id); this.eventBus.publishAll([ new MidtransCallbackEvent({ id: data.order_id, data: data, }), ]); console.log(`midtrans callback for order ${data.order_id}`); return 'success listen callback'; } }