Vue Storefront is now Alokai! Learn More
RemoveCartLineItem

RemoveCartLineItem

Implements RemoveCartLineItem Unified Method.

Source

import { getNormalizers } from "@alokai/connect/integration-kit";
import { HttpStatusCode } from "@alokai/connect/middleware";

import { defineApi } from "@vsf-enterprise/unified-api-commercetools";

export const removeCartLineItem = defineApi.removeCartLineItem(async (context, args) => {
  if (args?.cartId != null) {
    throw context.createHttpError({
      message: "Multiple carts feature is not available.",
      statusCode: HttpStatusCode.BAD_REQUEST,
    });
  }
  const { api } = await context.getApiClient();
  const me = await api.getMe();
  const cart = me.me.activeCart;

  if (!cart) {
    throw context.createHttpError({
      message: "User has no active cart",
      statusCode: HttpStatusCode.BAD_REQUEST,
    });
  }

  const lineItem = cart.lineItems.find(({ id }: { id: string }) => id === args.lineItemId);

  if (!lineItem) {
    throw context.createHttpError({
      message: "The line item could not be found in the cart",
      statusCode: HttpStatusCode.NOT_FOUND,
    });
  }

  const updatedCart = await api.removeFromCart(
    {
      id: cart.id,
      version: cart.version,
    },
    {
      ...lineItem,
      id: args.lineItemId,
    },
  );

  const { normalizeCart } = getNormalizers(context);

  return normalizeCart(updatedCart.cart);
});