GetCategories
Implements GetCategories Unified Method.
Source
import type { GetCategoriesArgs } from "@alokai/connect";
import { getNormalizers } from "@alokai/connect/integration-kit";
import type { CommercetoolsIntegrationContext } from "@vsf-enterprise/commercetools-api";
import { defineApi } from "@vsf-enterprise/unified-api-commercetools";
export const getCategories = defineApi.getCategories(async (context, args = {}) => {
const categories = await fetchCategoriesInBatches(context, args);
const { normalizeCategory } = getNormalizers(context);
return categories.map((category) => normalizeCategory(category));
});
async function fetchCategoriesInBatches(
context: CommercetoolsIntegrationContext,
args: GetCategoriesArgs,
) {
const batchSize = 200;
const search = {
catIds: args.ids,
limit: batchSize,
slugs: args.slugs,
};
const fetchBatch = async (offset: number) => {
const { api } = await context.getApiClient();
const response = await api.getFacetCategories({ ...search, offset });
return response.data?.categories.results ?? [];
};
let offset = 0;
let categories = await fetchBatch(offset);
const allCategories = [...categories];
while (categories.length === search.limit) {
offset += search.limit;
categories = await fetchBatch(offset);
allCategories.push(...categories);
}
return allCategories;
}