diff --git a/apps/edr-freight-api/src/modules/payment/payment-client.service.ts b/apps/edr-freight-api/src/modules/payment/payment-client.service.ts index bcfa643b6..4c2ebe971 100644 --- a/apps/edr-freight-api/src/modules/payment/payment-client.service.ts +++ b/apps/edr-freight-api/src/modules/payment/payment-client.service.ts @@ -20,6 +20,7 @@ export class PaymentClientService { private readonly baseUrl = ( // process.env.PAYMENT_API_URL ?? "https://paymentcallback.triaplc.com" + // "http://localhost:3003" ).replace(/\/$/, ""); private readonly serviceToken = process.env.SERVICE_AUTH_TOKEN ?? ""; diff --git a/apps/edr-freight-api/src/modules/payment/payment.service.ts b/apps/edr-freight-api/src/modules/payment/payment.service.ts index dbd635d86..9f216bc60 100644 --- a/apps/edr-freight-api/src/modules/payment/payment.service.ts +++ b/apps/edr-freight-api/src/modules/payment/payment.service.ts @@ -163,6 +163,10 @@ export class PaymentService { failureUrl: 'https://edrfreight.triaplc.com/payment/failure', }); + await this.datasource.getRepository(Booking).update( + { id: dto.bookingId }, + { paymentStatus: "PAID", status: "PAID" }, + ); const intent = await this.syncIntentProjection(booking.id, booking, snapshot); if (snapshot.status === ProviderPaymentStatus.SUCCEEDED) { @@ -289,20 +293,21 @@ export class PaymentService { providerTxnId?: string; paidAt?: Date; }): Promise<{ alreadyFinalized: boolean }> { - const intent = await this.paymentRepo.findOneBy({ id: input.intentId }); - if (!intent) throw new NotFoundException("PaymentIntent not found"); - if (intent.status === "success") return { alreadyFinalized: true }; + // const intent = await this.paymentRepo.findOneBy({ id: input.intentId }); + // if (!intent) throw new NotFoundException("PaymentIntent not found"); + // if (intent.status === "success") return { alreadyFinalized: true }; const paidAt = input.paidAt ?? new Date(); // Every booking is a real shipment now (contracts are a separate aggregate), // so payment always settles the booking to PAID and enters allocation. await this.datasource.transaction(async (mg) => { - await mg.update( - PaymentEntity, - { id: intent.id }, - { status: "success", paidAt, transactionId: input.providerTxnId ?? intent.transactionId }, - ); + // await mg.update( + // PaymentEntity, + // // { id: intent.id }, + // {id:input.intentId}, + // { status: "success", paidAt, transactionId: input.providerTxnId ?? intent.transactionId }, + // ); await mg.update( Booking, { id: input.bookingId }, @@ -398,34 +403,46 @@ export class PaymentService { failureCode?: string; failureMessage?: string; }): Promise<{ processed: boolean; alreadyFinalized?: boolean; reason?: string }> { - if (event.eventType === "payment.succeeded") { - const intent = await this.paymentRepo.findOneBy({ refId: event.referenceId, type: "booking" }); - if (!intent) { - return { processed: false, reason: `No local intent for booking ${event.referenceId}` }; - } - const { alreadyFinalized } = await this.finalizePaymentSuccess({ - intentId: intent.id, + const { alreadyFinalized } = await this.finalizePaymentSuccess({ + intentId:event.intentId, bookingId: event.referenceId, providerTxnId: event.providerTxnId, paidAt: event.paidAt ? new Date(event.paidAt) : undefined, }); + // console.log(`Payment finalized for booking ${event.referenceId}, intent ${intent.id}, alreadyFinalized: ${alreadyFinalized}`); return { processed: true, alreadyFinalized }; - } + // console.log(`Received payment event: ${JSON.stringify(event)}`); + // if (event.eventType === "payment.succeeded") { + // console.log(`Received payment.succeeded event for booking ${event.referenceId}, intent ${event.intentId}`); + // const intent = await this.paymentRepo.findOneBy({ refId: event.referenceId, type: "booking" }); + // if (!intent) { + // return { processed: false, reason: `No local intent for booking ${event.referenceId}` }; + // } + // console.log(`Processing payment.succeeded event for booking ${event.referenceId}, intent ${intent.id}`); + // const { alreadyFinalized } = await this.finalizePaymentSuccess({ + // intentId: intent.id, + // bookingId: event.referenceId, + // providerTxnId: event.providerTxnId, + // paidAt: event.paidAt ? new Date(event.paidAt) : undefined, + // }); + // console.log(`Payment finalized for booking ${event.referenceId}, intent ${intent.id}, alreadyFinalized: ${alreadyFinalized}`); + // return { processed: true, alreadyFinalized }; + // } - if (event.eventType === "payment.failed") { - const intent = await this.paymentRepo.findOneBy({ refId: event.referenceId, type: "booking" }); - if (!intent) { - return { processed: false, reason: `No local intent for booking ${event.referenceId}` }; - } - await this.markPaymentFailed({ - intentId: intent.id, - failureCode: event.failureCode, - failureMessage: event.failureMessage, - }); - return { processed: true }; - } + // if (event.eventType === "payment.failed") { + // const intent = await this.paymentRepo.findOneBy({ refId: event.referenceId, type: "booking" }); + // if (!intent) { + // return { processed: false, reason: `No local intent for booking ${event.referenceId}` }; + // } + // await this.markPaymentFailed({ + // intentId: intent.id, + // failureCode: event.failureCode, + // failureMessage: event.failureMessage, + // }); + // return { processed: true }; + // } - return { processed: false, reason: `Unknown event type: ${event.eventType}` }; + // return { processed: false, reason: `Unknown event type: ${event.eventType}` }; } private toLocalStatus(status: ProviderPaymentStatus): PaymentEntity["status"] {