GetProductDetails
Implements GetProductDetails Unified Method.
Source
import "./extended";
import { getNormalizers } from "@alokai/connect/integration-kit";
import type { SFCCIntegrationContext } from "@vsf-enterprise/sfcc-api";
import type { Category, Product } from "@vsf-enterprise/sfcc-types";
import { defineApi } from "@vsf-enterprise/unified-api-sfcc";
export const getProductDetails = defineApi.getProductDetails(async (context, args) => {
const { api } = await context.getApiClient();
const { id, sku } = args;
const productId = sku || id;
const product = await api.getProduct({ id: productId, perPricebook: true });
const rootCategoryId = await getPrimaryCategoryId(context, product);
const productCategory = rootCategoryId
? await api.getCategory({ id: rootCategoryId })
: undefined;
const { normalizeCategory, normalizeProduct } = getNormalizers(context);
return {
categoryHierarchy:
productCategory?.parentCategoryTree?.map((category) =>
normalizeCategory(category as Category),
) ?? [],
product: normalizeProduct(product),
};
});
async function getPrimaryCategoryId(context: SFCCIntegrationContext, product: Product) {
const { api } = await context.getApiClient();
if (product?.primaryCategoryId) {
return product.primaryCategoryId;
}
const masterId = product.master?.masterId;
if (!masterId) {
return;
}
const masterProduct = await api.getProduct({ id: masterId });
return masterProduct?.primaryCategoryId;
}