Skip to content

Commit

Permalink
Merge pull request #515 from Adyen/feature/AD-374
Browse files Browse the repository at this point in the history
Feature/ad 374
  • Loading branch information
pjaneta authored Feb 13, 2025
2 parents 881176e + 59b312c commit 90c344f
Show file tree
Hide file tree
Showing 13 changed files with 518 additions and 137 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public ResponseEntity<String> googlePayCartExpressCheckoutPDP(final HttpServletR

PaymentRequest paymentRequest = getPaymentRequest(googlePayExpressPDPRequest);

OCCPlaceOrderResponse placeOrderResponse = handlePayment(request, paymentRequest, Adyenv6coreConstants.PAYMENT_METHOD_GOOGLE_PAY, googlePayExpressPDPRequest.getAddressData(), googlePayExpressPDPRequest.getProductCode(), true);
OCCPlaceOrderResponse placeOrderResponse = handlePayment(request, paymentRequest, Adyenv6coreConstants.PAYMENT_METHOD_GOOGLE_PAY, googlePayExpressPDPRequest.getAddressData(), googlePayExpressPDPRequest.getCartId(), true);
String response = objectMapper.writeValueAsString(placeOrderResponse);
return ResponseEntity.ok(response);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
public class GooglePayExpressCartRequest implements Serializable {
private GooglePayDetails googlePayDetails;
private AddressData addressData;
private String cartId;

public GooglePayDetails getGooglePayDetails() {
return googlePayDetails;
Expand All @@ -24,4 +25,12 @@ public AddressData getAddressData() {
public void setAddressData(AddressData addressData) {
this.addressData = addressData;
}

public String getCartId() {
return cartId;
}

public void setCartId(String cartId) {
this.cartId = cartId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
import com.adyen.v6.request.ApplePayExpressCartRequest;
import com.adyen.v6.request.ApplePayExpressPDPRequest;
import de.hybris.platform.acceleratorstorefrontcommons.security.GUIDCookieStrategy;
import de.hybris.platform.commercefacades.order.data.CartData;
import de.hybris.platform.order.InvalidCartException;
import de.hybris.platform.order.exceptions.CalculationException;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
Expand All @@ -34,8 +37,8 @@ public class AdyenApplePayExpressCheckoutController {
public ResponseEntity applePayExpressPDP(final HttpServletRequest request, final HttpServletResponse response, @RequestBody ApplePayExpressPDPRequest applePayExpressPDPRequest) throws Exception {

PaymentRequest paymentRequest = getPaymentRequest(applePayExpressPDPRequest);

PaymentResponse paymentsResponse = adyenExpressCheckoutFacade.expressCheckoutPDP(applePayExpressPDPRequest.getProductCode(),
String cartId = createCartWithProduct(applePayExpressPDPRequest.getProductCode());
PaymentResponse paymentsResponse = adyenExpressCheckoutFacade.expressCheckoutPDP(cartId,
paymentRequest, Adyenv6coreConstants.PAYMENT_METHOD_APPLEPAY, applePayExpressPDPRequest.getAddressData(), request);

guidCookieStrategy.setCookie(request, response);
Expand All @@ -56,6 +59,13 @@ public ResponseEntity cartExpressCheckout(final HttpServletRequest request, fina
return new ResponseEntity<>(paymentsResponse, HttpStatus.OK);
}

/* Prevent breaking current implementation. To be removed when implementation will be completed. */
private String createCartWithProduct(String productCode) throws CalculationException {
CartData cart = adyenExpressCheckoutFacade.createOrGetCartForExpressCheckout(productCode);
adyenExpressCheckoutFacade.prepareCartForExpressCheckoutWithProduct(cart.getCode(), productCode, 1);
return cart.getCode();
}

private static <T extends ApplePayExpressCartRequest> PaymentRequest getPaymentRequest(T request) {
PaymentRequest paymentRequest = new PaymentRequest();
ApplePayDetails applePayDetails = request.getApplePayDetails();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.adyen.v6.controllers.checkout;

import com.adyen.v6.controllers.checkout.dto.CartDataDTO;
import com.adyen.v6.facades.AdyenExpressCheckoutFacade;
import de.hybris.platform.commercefacades.order.CartFacade;
import de.hybris.platform.commercefacades.order.data.CartData;
import de.hybris.platform.commercefacades.order.data.DeliveryModeData;
import de.hybris.platform.commercefacades.user.data.AddressData;
import de.hybris.platform.order.InvalidCartException;
import de.hybris.platform.order.exceptions.CalculationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


@Controller
@RequestMapping("/express-checkout/configure/")
public class AdyenExpressCheckoutController {

@Autowired
private AdyenExpressCheckoutFacade adyenExpressCheckoutFacade;

@Autowired
private CartFacade cartFacade;

@GetMapping("cart")
public ResponseEntity<CartDataDTO> getCartForExpressCheckout(final HttpServletRequest request, final HttpServletResponse response){
CartData cartForExpressCheckout = cartFacade.getSessionCart();
return ResponseEntity.ok(populateCartDataDto(cartForExpressCheckout));
}

@PostMapping("create-cart/{productCode}")
public ResponseEntity<CartDataDTO> createCartForExpressCheckout(final HttpServletRequest request, final HttpServletResponse response, @PathVariable("productCode") String productCode){
CartData cartForExpressCheckout = adyenExpressCheckoutFacade.createOrGetCartForExpressCheckout(productCode);
return ResponseEntity.ok(populateCartDataDto(cartForExpressCheckout));
}

@PostMapping("{cartId}/addresses/delivery")
@ResponseBody
public ResponseEntity createCartDeliveryAddress(final HttpServletRequest request, final HttpServletResponse response, @PathVariable("cartId") String cartId, final @RequestBody AddressData addressData)
{
adyenExpressCheckoutFacade.setDeliveryAddressForCart(addressData, cartId);
return ResponseEntity.ok().build();
}

@PostMapping("{cartId}/product/{productCode}/quantity/{quantity}")
public ResponseEntity setProductForExpressCheckout(final HttpServletRequest request, final HttpServletResponse response, @PathVariable("cartId") String cartId, @PathVariable("productCode") String productCode, @PathVariable("quantity") Integer quantity) throws CalculationException {
adyenExpressCheckoutFacade.prepareCartForExpressCheckoutWithProduct(cartId, productCode, quantity);
return ResponseEntity.ok().build();
}

@GetMapping("{cartId}/delivery-methods")
public ResponseEntity<List<DeliveryModeData>> getDeliveryMethods(final HttpServletRequest request, final HttpServletResponse response, @PathVariable("cartId") String cartId){
return ResponseEntity.ok().body(adyenExpressCheckoutFacade.getDeliveryModes(cartId));
}

@PostMapping("{cartId}/delivery-method/{deliveryMethodId}")
public ResponseEntity<CartDataDTO> setDeliveryMethod(final HttpServletRequest request, final HttpServletResponse response, @PathVariable("cartId") String cartId, @PathVariable("deliveryMethodId") String deliveryMethodId) throws CalculationException {
CartData cartForExpressCheckout = adyenExpressCheckoutFacade.setDeliveryModeForCart(deliveryMethodId, cartId);
return ResponseEntity.ok(populateCartDataDto(cartForExpressCheckout));
}

private static CartDataDTO populateCartDataDto(CartData cartForExpressCheckout) {
CartDataDTO cartDataDTO = new CartDataDTO();
cartDataDTO.setCode(cartForExpressCheckout.getCode());
cartDataDTO.setTotalPriceWithTax(cartForExpressCheckout.getTotalPriceWithTax());
return cartDataDTO;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public ResponseEntity googlePayExpressPDP(final HttpServletRequest request, fina

PaymentRequest paymentRequest = getPaymentRequest(googlePayExpressPDPRequest);

PaymentResponse paymentsResponse = adyenExpressCheckoutFacade.expressCheckoutPDP(googlePayExpressPDPRequest.getProductCode(),
PaymentResponse paymentsResponse = adyenExpressCheckoutFacade.expressCheckoutPDP(googlePayExpressPDPRequest.getCartId(),
paymentRequest, Adyenv6coreConstants.PAYMENT_METHOD_GOOGLE_PAY, googlePayExpressPDPRequest.getAddressData(), request);

guidCookieStrategy.setCookie(request, response);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.adyen.v6.controllers.checkout.dto;

import de.hybris.platform.commercefacades.product.data.PriceData;

public class CartDataDTO {
private String code;
private PriceData totalPriceWithTax;

// Getters and Setters
public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public PriceData getTotalPriceWithTax() {
return totalPriceWithTax;
}

public void setTotalPriceWithTax(PriceData totalPriceWithTax) {
this.totalPriceWithTax = totalPriceWithTax;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

public class GooglePayExpressPDPRequest extends GooglePayExpressCartRequest {
private String productCode;
private String cartId;

public String getProductCode() {
return productCode;
Expand All @@ -10,4 +11,11 @@ public String getProductCode() {
public void setProductCode(String productCode) {
this.productCode = productCode;
}

public String getCartId() {
return cartId;
}
public void setCartId(String cartId) {
this.cartId = cartId;
}
}
Loading

0 comments on commit 90c344f

Please sign in to comment.