@Override
  @RequestMapping(value = "/checkout", method = RequestMethod.GET)
  public Map<String, Object> checkout(
      final OrderForm orderForm,
      final HttpServletRequest request,
      final Device device,
      final HttpServletResponse response) {
    boolean auth = isAuthenticated();
    String cartId;

    if (!checkCartIdCookie(request)) {
      String error = "No cartId cookie.";
      Map<String, Object> map = new HashMap<String, Object>();
      map.put("error", error);
      return map;
    } else {
      Cookie cookie = getCartIdCookie(request);
      cartId = cookie.getValue();
    }

    ShoppingCart cart = cartService.get(UUID.fromString(cartId));

    if (cart.getCartItems() == null || cart.getCartItems().size() == 0) {
      String error = "No items in cart to checkout.";
      Map<String, Object> map = new HashMap<String, Object>();
      map.put("error", error);
      return map;
    }

    User user = null;
    if (auth) {
      user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    }

    Map<String, Object> map = new HashMap<String, Object>();

    String digitalData =
        digitalDataAdapter.adapt(dataLayer.checkout(request, response, device, cart, user));

    map.put("isAuthenticated", auth);
    map.put("cartId", cart.getId().toString());
    map.put("cartSize", calculateCartSize(cart));
    map.put("digitalData", digitalData);

    return map;
  }