Skip to content

Commit

Permalink
Refactor commerce build request functions and rework their unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
fbeaudoincoveo committed Feb 27, 2025
1 parent dbade10 commit d91729d
Show file tree
Hide file tree
Showing 33 changed files with 1,262 additions and 866 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
CommerceAPIClient,
getCommerceApiBaseUrl,
} from './commerce-api-client.js';
import {CommerceAPIRequest} from './common/request.js';
import {FilterableCommerceAPIRequest} from './common/request.js';
import {CommerceResponse} from './common/response.js';
import {CommerceRecommendationsRequest} from './recommendations/recommendations-request.js';

Expand Down Expand Up @@ -36,8 +36,8 @@ describe('commerce api client', () => {
};

const buildCommerceAPIRequest = async (
req: Partial<CommerceAPIRequest> = {}
): Promise<CommerceAPIRequest> => ({
req: Partial<FilterableCommerceAPIRequest> = {}
): Promise<FilterableCommerceAPIRequest> => ({
accessToken: accessToken,
organizationId: organizationId,
url: apiBaseUrl,
Expand Down
21 changes: 12 additions & 9 deletions packages/headless/src/api/commerce/commerce-api-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ import {
CommerceAPIErrorResponse,
CommerceAPIErrorStatusResponse,
} from './commerce-api-error-response.js';
import {buildRequest, CommerceAPIRequest} from './common/request.js';
import {
getRequestOptions,
FilterableCommerceAPIRequest,
} from './common/request.js';
import {CommerceSuccessResponse} from './common/response.js';
import {
CommerceFacetSearchRequest,
Expand All @@ -26,7 +29,7 @@ import {
} from './recommendations/recommendations-request.js';
import {RecommendationsCommerceSuccessResponse} from './recommendations/recommendations-response.js';
import {
buildQuerySuggestRequest,
getQuerySuggestRequestOptions,
QuerySuggestRequest,
} from './search/query-suggest/query-suggest-request.js';
import {QuerySuggestSuccessResponse} from './search/query-suggest/query-suggest-response.js';
Expand Down Expand Up @@ -71,18 +74,18 @@ export class CommerceAPIClient implements CommerceFacetSearchAPIClient {
constructor(private options: CommerceAPIClientOptions) {}

async getProductListing(
req: CommerceAPIRequest
req: FilterableCommerceAPIRequest
): Promise<CommerceAPIResponse<CommerceSuccessResponse>> {
return this.query({
...buildRequest(req, 'listing'),
...getRequestOptions(req, 'listing'),
...this.options,
});
}

async search(
req: CommerceSearchRequest
): Promise<CommerceAPIResponse<SearchCommerceSuccessResponse>> {
const requestOptions = buildRequest(req, 'search');
const requestOptions = getRequestOptions(req, 'search');
return this.query({
...requestOptions,
requestParams: {
Expand All @@ -105,7 +108,7 @@ export class CommerceAPIClient implements CommerceFacetSearchAPIClient {
async productSuggestions(
req: CommerceSearchRequest
): Promise<CommerceAPIResponse<SearchCommerceSuccessResponse>> {
const requestOptions = buildRequest(req, 'search/productSuggest');
const requestOptions = getRequestOptions(req, 'search/productSuggest');
return this.query({
...requestOptions,
requestParams: {
Expand All @@ -119,7 +122,7 @@ export class CommerceAPIClient implements CommerceFacetSearchAPIClient {
async querySuggest(
req: QuerySuggestRequest
): Promise<CommerceAPIResponse<QuerySuggestSuccessResponse>> {
const requestOptions = buildQuerySuggestRequest(req);
const requestOptions = getQuerySuggestRequestOptions(req);
return this.query<QuerySuggestSuccessResponse>({
...requestOptions,
requestParams: {
Expand All @@ -134,7 +137,7 @@ export class CommerceAPIClient implements CommerceFacetSearchAPIClient {
req: CommerceFacetSearchRequest,
type: FacetSearchType
): Promise<CommerceAPIResponse<SpecificFacetSearchResponse>> {
const requestOptions = buildRequest(req, 'facet');
const requestOptions = getRequestOptions(req, 'facet');
return this.query<SpecificFacetSearchResponse>({
...requestOptions,
url: `${requestOptions.url}?type=${type}`,
Expand All @@ -153,7 +156,7 @@ export class CommerceAPIClient implements CommerceFacetSearchAPIClient {
async plan(
req: CommerceSearchRequest
): Promise<CommerceAPIResponse<CommerceSuccessResponse>> {
const requestOptions = buildRequest(req, 'search');
const requestOptions = getRequestOptions(req, 'search');
return this.query({
...requestOptions,
requestParams: {
Expand Down
12 changes: 7 additions & 5 deletions packages/headless/src/api/commerce/common/request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,18 @@ export type BaseCommerceAPIRequest = BaseParam &
CountryParam &
CurrencyParam &
ClientIdParam &
ContextParam &
ContextParam;

export type PaginatedCommerceAPIRequest = BaseCommerceAPIRequest &
PageParam &
PerPageParam;

export type CommerceAPIRequest = BaseCommerceAPIRequest &
export type FilterableCommerceAPIRequest = PaginatedCommerceAPIRequest &
FacetsParam &
SortParam;

export const buildRequest = (
req: CommerceAPIRequest,
export const getRequestOptions = (
req: FilterableCommerceAPIRequest,
path: CommerceApiMethod
) => {
return {
Expand All @@ -38,7 +40,7 @@ export const buildRequest = (
};
};

const prepareRequestParams = (req: CommerceAPIRequest) => {
const prepareRequestParams = (req: FilterableCommerceAPIRequest) => {
const {
trackingId,
clientId,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {SlotIdParam} from '../commerce-api-params.js';
import {CommerceApiMethod} from '../commerce-metadata.js';
import {BaseCommerceAPIRequest, baseRequest} from '../common/request.js';
import {PaginatedCommerceAPIRequest, baseRequest} from '../common/request.js';

export type CommerceRecommendationsRequest = BaseCommerceAPIRequest &
export type CommerceRecommendationsRequest = PaginatedCommerceAPIRequest &
SlotIdParam;
export const buildRecommendationsRequest = (
req: CommerceRecommendationsRequest,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export type QuerySuggestRequest = BaseParam &
ContextParam &
QueryParam;

export const buildQuerySuggestRequest = (req: QuerySuggestRequest) => {
export const getQuerySuggestRequestOptions = (req: QuerySuggestRequest) => {
return {
...baseRequest(req, 'search/querySuggest'),
requestParams: prepareRequestParams(req),
Expand Down
4 changes: 2 additions & 2 deletions packages/headless/src/api/commerce/search/request.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {QueryParam} from '../commerce-api-params.js';
import {CommerceAPIRequest} from '../common/request.js';
import {FilterableCommerceAPIRequest} from '../common/request.js';

export type CommerceSearchRequest = CommerceAPIRequest & QueryParam;
export type CommerceSearchRequest = FilterableCommerceAPIRequest & QueryParam;
Loading

0 comments on commit d91729d

Please sign in to comment.