diff --git a/src/modules/configuration/midtrans/data/services/midtrans.service.ts b/src/modules/configuration/midtrans/data/services/midtrans.service.ts index 2dbad29..713697b 100644 --- a/src/modules/configuration/midtrans/data/services/midtrans.service.ts +++ b/src/modules/configuration/midtrans/data/services/midtrans.service.ts @@ -4,10 +4,23 @@ import { Snap } from 'midtrans-client'; import { MidtransStatus } from '../../domain/entities/midtrans-callback.event'; import { TransactionReadService } from 'src/modules/transaction/transaction/data/services/transaction-read.service'; +import * as moment from 'moment'; + @Injectable() export class MidtransService { constructor(private transaction: TransactionReadService) {} + isMoreThan24HoursAgo(dateString) { + const date = moment(dateString, 'YYYY-MM-DD', true); + if (!date.isValid()) { + return false; + } + + const now = moment(); + const diffInHours = now.diff(date, 'hours'); + return diffInHours > 24; + } + get midtransInstance() { return new Snap({ isProduction: false, @@ -24,14 +37,17 @@ export class MidtransService { const pendingIds = await this.transaction.getPendingOrderId(); const responses = []; - for (const id of pendingIds) { + for (const transaction of pendingIds) { + const { id, invoice_date } = transaction; let status; try { status = await this.getStatus(id); } catch (error) { status = { order_id: id, - transaction_status: 'cancel', + transaction_status: this.isMoreThan24HoursAgo(invoice_date) + ? 'cancel' + : 'pending', }; } responses.push(status); diff --git a/src/modules/transaction/transaction/data/services/transaction-read.service.ts b/src/modules/transaction/transaction/data/services/transaction-read.service.ts index eee20de..7efd6bf 100644 --- a/src/modules/transaction/transaction/data/services/transaction-read.service.ts +++ b/src/modules/transaction/transaction/data/services/transaction-read.service.ts @@ -25,9 +25,9 @@ export class TransactionReadService extends BaseReadService { status: STATUS.PENDING, payment_type: TransactionPaymentType.MIDTRANS, }, - select: ['id'], + select: ['id', 'invoice_date'], }); - return transactions.map(({ id }) => id); + return transactions; } }