import { Cache, CacheKey } from '../../lib/cache'; import { category } from '../urls'; import { GetCategoryResponse, SearchParams } from '../../types'; import { generateCommerceSearchParams } from '../../utils'; import appFetch, { FetchResponseType } from '../../utils/app-fetch'; import { parse } from 'lossless-json'; import logger from '../../utils/log'; import { ServerVariables } from '../../utils/server-variables'; const getListDataHandler = ( locale, currency, searchParams: SearchParams, headers?: Record ) => { return async function () { const params = generateCommerceSearchParams(searchParams); const rawData = await appFetch({ url: `${category.list}${params}`, locale, currency, init: { headers: { Accept: 'application/json', 'Content-Type': 'application/json', ...(headers ?? {}) } }, responseType: FetchResponseType.TEXT }); let data: GetCategoryResponse; try { const numberValueParser = (value) => { return String(value); }; data = parse( rawData, undefined, numberValueParser ) as GetCategoryResponse; } catch (error) { logger.fatal('Error while parsing list data', { error, rawData: rawData.startsWith('') ? `${rawData.substring(0, 50)}...` : rawData }); } return data; }; }; export const getListData = async ({ locale = ServerVariables.locale, currency = ServerVariables.currency, searchParams, headers }: { locale?: string; currency?: string; searchParams: SearchParams; headers?: Record; }) => { return Cache.wrap( CacheKey.List(searchParams, headers), locale, getListDataHandler(locale, currency, searchParams, headers), { expire: 300, compressed: true } ); };