fix(medusa-payment-stripe): Missing transactions in Stripe provider (#2603)

This commit is contained in:
Adrien de Peretti authored and GitHub committed 2022-11-14 20:03:06 +01:00
1 parent d0809bdf25
commit 9e91a50df1
4 files changed
+58 -47

No files matched your search

@@ -12,8 +12,7 @@ class StripeBase extends AbstractPaymentService {
regionService,
manager,
},
options,
paymentMethodTypes
options
) {
super(
{
@@ -25,8 +24,6 @@ class StripeBase extends AbstractPaymentService {
},
options
)
/** @private @const {string[]} */
this.paymentMethodTypes_ = paymentMethodTypes
/**
* Required Stripe options:
@@ -123,18 +120,19 @@ class StripeBase extends AbstractPaymentService {
* @return {Promise<PaymentSessionData>} Stripe payment intent
*/
async createPayment(cart) {
const intentRequest = this.getPaymentIntentOptions()
const intentRequestData = this.getPaymentIntentOptions()
return await this.stripeProviderService_.createPayment(cart, intentRequest)
return await this.stripeProviderService_
.withTransaction(this.manager_)
.createPayment(cart, intentRequestData)
}
async createPaymentNew(paymentInput) {
const intentRequest = this.getPaymentIntentOptions()
const intentRequestData = this.getPaymentIntentOptions()
return await this.stripeProviderService_.createPaymentNew(
paymentInput,
intentRequest
)
return await this.stripeProviderService_
.withTransaction(this.manager_)
.createPaymentNew(paymentInput, intentRequestData)
}
/**
@@ -183,17 +181,19 @@ class StripeBase extends AbstractPaymentService {
* @return {Promise<PaymentSessionData>} Stripe payment intent
*/
async updatePayment(paymentSessionData, cart) {
return await this.stripeProviderService_.updatePayment(
paymentSessionData,
cart
)
const intentRequestData = this.getPaymentIntentOptions()
return await this.stripeProviderService_
.withTransaction(this.manager_)
.updatePayment(paymentSessionData, cart, intentRequestData)
}
async updatePaymentNew(paymentSessionData, paymentInput) {
return await this.stripeProviderService_.updatePaymentNew(
paymentSessionData,
paymentInput
)
const intentRequestData = this.getPaymentIntentOptions()
return await this.stripeProviderService_
.withTransaction(this.manager_)
.updatePaymentNew(paymentSessionData, paymentInput, intentRequestData)
}
async deletePayment(paymentSession) {
@@ -127,6 +127,7 @@ class StripeProviderService extends AbstractPaymentService {
* Creates a Stripe payment intent.
* If customer is not registered in Stripe, we do so.
* @param {Cart} cart - cart to create a payment for
* @param intentRequestData
* @return {Promise<PaymentSessionData>} Stripe payment intent
*/
async createPayment(cart, intentRequestData = {}) {
@@ -271,20 +272,24 @@ class StripeProviderService extends AbstractPaymentService {
* Updates Stripe payment intent.
* @param {PaymentSessionData} paymentSessionData - payment session data.
* @param {Cart} cart
* @param intentRequestData
* @return {Promise<PaymentSessionData>} Stripe payment intent
*/
async updatePayment(sessionData, cart) {
async updatePayment(paymentSessionData, cart, intentRequestData) {
try {
const stripeId = cart.customer?.metadata?.stripe_id || undefined
if (stripeId !== sessionData.customer) {
return await this.createPayment(cart)
if (stripeId !== paymentSessionData.customer) {
return await this.createPayment(cart, intentRequestData)
} else {
if (cart.total && sessionData.amount === Math.round(cart.total)) {
return sessionData
if (
cart.total &&
paymentSessionData.amount === Math.round(cart.total)
) {
return paymentSessionData
}
return await this.stripe_.paymentIntents.update(sessionData.id, {
return await this.stripe_.paymentIntents.update(paymentSessionData.id, {
amount: Math.round(cart.total),
})
}
@@ -293,15 +298,15 @@ class StripeProviderService extends AbstractPaymentService {
}
}
async updatePaymentNew(paymentSessionData, paymentInput) {
async updatePaymentNew(paymentSessionData, paymentInput, intentRequestData) {
try {
const stripeId = paymentInput.customer?.metadata?.stripe_id
if (stripeId !== paymentInput.customer_id) {
return await this.createPaymentNew(paymentInput)
return await this.createPaymentNew(paymentInput, intentRequestData)
} else {
if (paymentSessionData.amount === Math.round(paymentInput.amount)) {
return sessionData
return paymentSessionData
}
return await this.stripe_.paymentIntents.update(paymentSessionData.id, {