Vue Storefront is now Alokai! Learn More
GetProducts

GetProducts

Implements GetProducts Unified Method.

Source

import "./extended";
import { getNormalizers } from "@alokai/connect/integration-kit";
import { getLogger } from "@alokai/connect/middleware";

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

export const getProducts = defineApi.getProducts(async (context, { ids = [], skus = [] }) => {
  const { api } = await context.getApiClient();
  const logger = getLogger(context);
  // both, ids and skus, may be product codes
  const codes = [...ids, ...skus];
  const { normalizeProductCatalogItem } = getNormalizers(context);

  // SAP CC API does not support fetching multiple products by id (code)
  // https://help.sap.com/docs/SAP_COMMERCE_CLOUD_PUBLIC_CLOUD/3476714bba0b4cb9b3eb58c270e44439/8c3f3e3a86691014b312f98ba6e321ab.html?version=v2105&locale=en-US
  const promises = codes.map(async (productCode) => {
    try {
      return await api.getProduct({ productCode });
    } catch (error) {
      logger.warning(`Product with code "${productCode}" not found or failed to fetch`, { error });
      return null;
    }
  });

  const results = await Promise.all(promises);
  const successfulProducts = results.filter((result) => result !== null);

  return {
    products: successfulProducts.map(({ data: product }) => normalizeProductCatalogItem(product)),
  };
});