import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Order } from './order.entity'; import { MidtransService, PaymentMethod } from './midtrans.service';
@Injectable() export class OrdersService { constructor(@InjectRepository(Order) private orders: Repository<Order>, private midtrans: MidtransService) {} async create(input: Omit<Order, 'id'|'createdAt'|'paymentStatus'|'midtransOrderId'>, method: PaymentMethod) { const order = await this.orders.save({ ...input, paymentStatus: 'pending', midtransOrderId: `RENT-${Date.now()}` }); const payment = await this.midtrans.createTransaction(order, method); return { order, payment }; } async webhook(notification: { order_id: string; transaction_status: string; status_code: string; gross_amount: string; signature_key: string }) { if (!this.midtrans.isValidSignature(notification)) return { accepted: false }; const order = await this.orders.findOneBy({ midtransOrderId: notification.order_id }); if (!order) return { accepted: true }; order.paymentStatus = ['settlement', 'capture'].includes(notification.transaction_status) ? 'paid' : notification.transaction_status === 'expire' ? 'expired' : 'cancelled'; await this.orders.save(order); return { accepted: true }; } }

