diff --git a/packages/medusa-payment-paypal/src/api/routes/hooks/paypal.js b/packages/medusa-payment-paypal/src/api/routes/hooks/paypal.js index 03fa6d3276..8803ccb6b5 100644 --- a/packages/medusa-payment-paypal/src/api/routes/hooks/paypal.js +++ b/packages/medusa-payment-paypal/src/api/routes/hooks/paypal.js @@ -22,7 +22,8 @@ export default async (req, res) => { } try { - const authId = req.body.resource.id + const body = req.body + const authId = body.resource.id const auth = await paypalService.retrieveAuthorization(authId) const order = await paypalService.retrieveOrderFromAuth(auth) @@ -37,18 +38,44 @@ export default async (req, res) => { const manager = req.scope.resolve("manager") const cartService = req.scope.resolve("cartService") + const swapService = req.scope.resolve("swapService") const orderService = req.scope.resolve("orderService") await manager.transaction(async (m) => { - const order = await orderService - .withTransaction(m) - .retrieveByCartId(cartId) - .catch((_) => undefined) + const cart = await cartService.withTransaction(m).retrieve(cartId) - if (!order) { - await cartService.withTransaction(m).setPaymentSession(cartId, "paypal") - await cartService.withTransaction(m).authorizePayment(cartId) - await orderService.withTransaction(m).createFromCart(cartId) + switch (cart.type) { + case "swap": { + const swap = await swapService + .withTransaction(m) + .retrieveByCartId(cartId) + .catch((_) => undefined) + + if (swap && swap.confirmed_at === null) { + await cartService + .withTransaction(m) + .setPaymentSession(cartId, "paypal") + await cartService.withTransaction(m).authorizePayment(cartId) + await swapService.withTransaction(m).registerCartCompletion(swap.id) + } + break + } + + default: { + const order = await orderService + .withTransaction(m) + .retrieveByCartId(cartId) + .catch((_) => undefined) + + if (!order) { + await cartService + .withTransaction(m) + .setPaymentSession(cartId, "paypal") + await cartService.withTransaction(m).authorizePayment(cartId) + await orderService.withTransaction(m).createFromCart(cartId) + } + break + } } })