From 3ef82e9a9cd8f008476264598617ad83716d42d7 Mon Sep 17 00:00:00 2001 From: Raed Date: Thu, 14 Dec 2023 22:25:50 +0100 Subject: [PATCH 1/4] fix(recommend): update recommended-for-you model type --- .../recommend/src/methods/getRecommendations.ts | 11 ++++++++--- .../recommend/src/types/RecommendationsQuery.ts | 15 +++++++++++++++ .../recommend/src/types/RecommendedForYouQuery.ts | 7 ++++--- .../recommend/src/types/WithRecommendMethods.ts | 6 ++++-- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/packages/recommend/src/methods/getRecommendations.ts b/packages/recommend/src/methods/getRecommendations.ts index b6b283197..6c4866cbe 100644 --- a/packages/recommend/src/methods/getRecommendations.ts +++ b/packages/recommend/src/methods/getRecommendations.ts @@ -3,7 +3,7 @@ import { MethodEnum } from '@algolia/requester-common'; import { BaseRecommendClient, RecommendationsQuery, - RecommendedForYouQuery, + RecommendationsQueryWithoutObjectID, WithRecommendMethods, } from '../types'; import { TrendingQuery } from '../types/TrendingQuery'; @@ -13,9 +13,14 @@ type GetRecommendations = ( ) => WithRecommendMethods['getRecommendations']; export const getRecommendations: GetRecommendations = base => { - return (queries: ReadonlyArray, requestOptions) => { + return ( + queries: ReadonlyArray< + RecommendationsQuery | TrendingQuery | RecommendationsQueryWithoutObjectID + >, + requestOptions + ) => { const requests: ReadonlyArray< - RecommendationsQuery | TrendingQuery | RecommendedForYouQuery + RecommendationsQuery | TrendingQuery | RecommendationsQueryWithoutObjectID > = queries.map(query => ({ ...query, // The `threshold` param is required by the endpoint to make it easier diff --git a/packages/recommend/src/types/RecommendationsQuery.ts b/packages/recommend/src/types/RecommendationsQuery.ts index 4d269f869..bb490860b 100644 --- a/packages/recommend/src/types/RecommendationsQuery.ts +++ b/packages/recommend/src/types/RecommendationsQuery.ts @@ -39,3 +39,18 @@ export type RecommendationsQuery = { */ readonly fallbackParameters?: RecommendSearchOptions; }; + +/** + * Base type for models that don't require an `objectID`. + * + * Currently the only model that doesn't require an `objectID` is `recommended-for-you`. + */ +export type RecommendationsQueryWithoutObjectID = Omit< + RecommendationsQuery, + 'objectID' | 'model' +> & { + /** + * The name of the Recommendation model to use. + */ + readonly model: 'recommended-for-you'; +}; diff --git a/packages/recommend/src/types/RecommendedForYouQuery.ts b/packages/recommend/src/types/RecommendedForYouQuery.ts index c6dd34f9f..9d6f29be1 100644 --- a/packages/recommend/src/types/RecommendedForYouQuery.ts +++ b/packages/recommend/src/types/RecommendedForYouQuery.ts @@ -1,10 +1,11 @@ -import { RecommendationsQuery } from './RecommendationsQuery'; +import { RecommendationsQueryWithoutObjectID } from './RecommendationsQuery'; import { RecommendSearchOptions } from './RecommendSearchOptions'; export type RecommendedForYouQuery = Omit< - RecommendationsQuery, - 'model' | 'objectID' | 'queryParameters' + RecommendationsQueryWithoutObjectID, + 'model' | 'queryParameters' > & { + readonly model: 'recommended-for-you'; /** * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. */ diff --git a/packages/recommend/src/types/WithRecommendMethods.ts b/packages/recommend/src/types/WithRecommendMethods.ts index fde4b88a7..afd5402ce 100644 --- a/packages/recommend/src/types/WithRecommendMethods.ts +++ b/packages/recommend/src/types/WithRecommendMethods.ts @@ -4,7 +4,7 @@ import { RequestOptions } from '@algolia/transporter'; import { RecommendedForYouQuery } from '../builds/node'; import { FrequentlyBoughtTogetherQuery } from './FrequentlyBoughtTogetherQuery'; import { LookingSimilarQuery } from './LookingSimilarQuery'; -import { RecommendationsQuery } from './RecommendationsQuery'; +import { RecommendationsQuery, RecommendationsQueryWithoutObjectID } from './RecommendationsQuery'; import { RelatedProductsQuery } from './RelatedProductsQuery'; import { TrendingFacetsQuery } from './TrendingFacetsQuery'; import { TrendingFacetsResponse } from './TrendingFacetsResponse'; @@ -30,7 +30,9 @@ export type WithRecommendMethods = TType & { * Returns recommendations. */ readonly getRecommendations: ( - queries: ReadonlyArray, + queries: ReadonlyArray< + RecommendationsQuery | TrendingQuery | RecommendationsQueryWithoutObjectID + >, requestOptions?: RequestOptions & SearchOptions ) => Readonly>>; From a6f9cb51a5d786abe6c2ef79bea1f775e4ea7c02 Mon Sep 17 00:00:00 2001 From: Raed Date: Mon, 18 Dec 2023 17:34:33 +0100 Subject: [PATCH 2/4] fix RecommendedForYouQuery by removing model --- packages/recommend/src/types/RecommendedForYouQuery.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/recommend/src/types/RecommendedForYouQuery.ts b/packages/recommend/src/types/RecommendedForYouQuery.ts index 9d6f29be1..86549329d 100644 --- a/packages/recommend/src/types/RecommendedForYouQuery.ts +++ b/packages/recommend/src/types/RecommendedForYouQuery.ts @@ -5,7 +5,6 @@ export type RecommendedForYouQuery = Omit< RecommendationsQueryWithoutObjectID, 'model' | 'queryParameters' > & { - readonly model: 'recommended-for-you'; /** * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. */ From 5795c4876f6ba6aac1ffa4683d2a4f1effadc749 Mon Sep 17 00:00:00 2001 From: Raed Date: Mon, 18 Dec 2023 18:58:34 +0100 Subject: [PATCH 3/4] simplify getRecommendations --- .../src/methods/getRecommendations.ts | 19 +++---------------- .../src/types/RecommendationsQuery.ts | 3 +-- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/packages/recommend/src/methods/getRecommendations.ts b/packages/recommend/src/methods/getRecommendations.ts index 6c4866cbe..084752fa1 100644 --- a/packages/recommend/src/methods/getRecommendations.ts +++ b/packages/recommend/src/methods/getRecommendations.ts @@ -1,27 +1,14 @@ import { MethodEnum } from '@algolia/requester-common'; -import { - BaseRecommendClient, - RecommendationsQuery, - RecommendationsQueryWithoutObjectID, - WithRecommendMethods, -} from '../types'; -import { TrendingQuery } from '../types/TrendingQuery'; +import { BaseRecommendClient, WithRecommendMethods } from '../types'; type GetRecommendations = ( base: BaseRecommendClient ) => WithRecommendMethods['getRecommendations']; export const getRecommendations: GetRecommendations = base => { - return ( - queries: ReadonlyArray< - RecommendationsQuery | TrendingQuery | RecommendationsQueryWithoutObjectID - >, - requestOptions - ) => { - const requests: ReadonlyArray< - RecommendationsQuery | TrendingQuery | RecommendationsQueryWithoutObjectID - > = queries.map(query => ({ + return (queries, requestOptions) => { + const requests = queries.map(query => ({ ...query, // The `threshold` param is required by the endpoint to make it easier // to provide a default value later, so we default it in the client diff --git a/packages/recommend/src/types/RecommendationsQuery.ts b/packages/recommend/src/types/RecommendationsQuery.ts index bb490860b..09e720768 100644 --- a/packages/recommend/src/types/RecommendationsQuery.ts +++ b/packages/recommend/src/types/RecommendationsQuery.ts @@ -1,4 +1,3 @@ -import { RecommendModel } from './RecommendModel'; import { RecommendSearchOptions } from './RecommendSearchOptions'; export type RecommendationsQuery = { @@ -10,7 +9,7 @@ export type RecommendationsQuery = { /** * The name of the Recommendation model to use. */ - readonly model: RecommendModel; + readonly model: 'related-products' | 'bought-together' | 'looking-similar'; /** * The `objectID` of the item to get recommendations for. From 07ce6df31c0b685866db17d8d560cf40edcd8c04 Mon Sep 17 00:00:00 2001 From: Raed Date: Tue, 19 Dec 2023 09:57:41 +0100 Subject: [PATCH 4/4] RecommendedForYouParams --- .../recommend/src/methods/getRecommendations.ts | 12 ++++++++++-- .../recommend/src/methods/getRecommendedForYou.ts | 9 +++++++-- .../recommend/src/types/RecommendationsQuery.ts | 15 --------------- .../recommend/src/types/RecommendedForYouQuery.ts | 12 +++++++++--- .../recommend/src/types/WithRecommendMethods.ts | 10 ++++------ 5 files changed, 30 insertions(+), 28 deletions(-) diff --git a/packages/recommend/src/methods/getRecommendations.ts b/packages/recommend/src/methods/getRecommendations.ts index 084752fa1..f85ee5581 100644 --- a/packages/recommend/src/methods/getRecommendations.ts +++ b/packages/recommend/src/methods/getRecommendations.ts @@ -1,6 +1,12 @@ import { MethodEnum } from '@algolia/requester-common'; -import { BaseRecommendClient, WithRecommendMethods } from '../types'; +import { + BaseRecommendClient, + RecommendationsQuery, + RecommendedForYouQuery, + TrendingQuery, + WithRecommendMethods, +} from '../types'; type GetRecommendations = ( base: BaseRecommendClient @@ -8,7 +14,9 @@ type GetRecommendations = ( export const getRecommendations: GetRecommendations = base => { return (queries, requestOptions) => { - const requests = queries.map(query => ({ + const requests: ReadonlyArray< + RecommendationsQuery | TrendingQuery | RecommendedForYouQuery + > = queries.map(query => ({ ...query, // The `threshold` param is required by the endpoint to make it easier // to provide a default value later, so we default it in the client diff --git a/packages/recommend/src/methods/getRecommendedForYou.ts b/packages/recommend/src/methods/getRecommendedForYou.ts index 7f598c556..28116b642 100644 --- a/packages/recommend/src/methods/getRecommendedForYou.ts +++ b/packages/recommend/src/methods/getRecommendedForYou.ts @@ -1,13 +1,18 @@ import { MethodEnum } from '@algolia/requester-common'; -import { BaseRecommendClient, RecommendedForYouQuery, WithRecommendMethods } from '../types'; +import { + BaseRecommendClient, + RecommendedForYouParams, + RecommendedForYouQuery, + WithRecommendMethods, +} from '../types'; type GetRecommendedForYou = ( base: BaseRecommendClient ) => WithRecommendMethods['getRecommendedForYou']; export const getRecommendedForYou: GetRecommendedForYou = base => { - return (queries: readonly RecommendedForYouQuery[], requestOptions) => { + return (queries: readonly RecommendedForYouParams[], requestOptions) => { const requests: readonly RecommendedForYouQuery[] = queries.map(query => ({ ...query, model: 'recommended-for-you', diff --git a/packages/recommend/src/types/RecommendationsQuery.ts b/packages/recommend/src/types/RecommendationsQuery.ts index 09e720768..d446db555 100644 --- a/packages/recommend/src/types/RecommendationsQuery.ts +++ b/packages/recommend/src/types/RecommendationsQuery.ts @@ -38,18 +38,3 @@ export type RecommendationsQuery = { */ readonly fallbackParameters?: RecommendSearchOptions; }; - -/** - * Base type for models that don't require an `objectID`. - * - * Currently the only model that doesn't require an `objectID` is `recommended-for-you`. - */ -export type RecommendationsQueryWithoutObjectID = Omit< - RecommendationsQuery, - 'objectID' | 'model' -> & { - /** - * The name of the Recommendation model to use. - */ - readonly model: 'recommended-for-you'; -}; diff --git a/packages/recommend/src/types/RecommendedForYouQuery.ts b/packages/recommend/src/types/RecommendedForYouQuery.ts index 86549329d..c82ed436a 100644 --- a/packages/recommend/src/types/RecommendedForYouQuery.ts +++ b/packages/recommend/src/types/RecommendedForYouQuery.ts @@ -1,10 +1,11 @@ -import { RecommendationsQueryWithoutObjectID } from './RecommendationsQuery'; +import { RecommendationsQuery } from './RecommendationsQuery'; import { RecommendSearchOptions } from './RecommendSearchOptions'; export type RecommendedForYouQuery = Omit< - RecommendationsQueryWithoutObjectID, - 'model' | 'queryParameters' + RecommendationsQuery, + 'model' | 'objectID' | 'queryParameters' > & { + readonly model: 'recommended-for-you'; /** * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. */ @@ -17,3 +18,8 @@ export type RecommendedForYouQuery = Omit< readonly userToken: string; }; }; + +/** + * The parameters used for `getRecommendedForYou` method. + */ +export type RecommendedForYouParams = Omit; diff --git a/packages/recommend/src/types/WithRecommendMethods.ts b/packages/recommend/src/types/WithRecommendMethods.ts index afd5402ce..defb1fc42 100644 --- a/packages/recommend/src/types/WithRecommendMethods.ts +++ b/packages/recommend/src/types/WithRecommendMethods.ts @@ -1,10 +1,10 @@ import { SearchOptions, SearchResponse } from '@algolia/client-search'; import { RequestOptions } from '@algolia/transporter'; -import { RecommendedForYouQuery } from '../builds/node'; +import { RecommendedForYouParams, RecommendedForYouQuery } from '../builds/node'; import { FrequentlyBoughtTogetherQuery } from './FrequentlyBoughtTogetherQuery'; import { LookingSimilarQuery } from './LookingSimilarQuery'; -import { RecommendationsQuery, RecommendationsQueryWithoutObjectID } from './RecommendationsQuery'; +import { RecommendationsQuery } from './RecommendationsQuery'; import { RelatedProductsQuery } from './RelatedProductsQuery'; import { TrendingFacetsQuery } from './TrendingFacetsQuery'; import { TrendingFacetsResponse } from './TrendingFacetsResponse'; @@ -30,9 +30,7 @@ export type WithRecommendMethods = TType & { * Returns recommendations. */ readonly getRecommendations: ( - queries: ReadonlyArray< - RecommendationsQuery | TrendingQuery | RecommendationsQueryWithoutObjectID - >, + queries: ReadonlyArray, requestOptions?: RequestOptions & SearchOptions ) => Readonly>>; @@ -80,7 +78,7 @@ export type WithRecommendMethods = TType & { * Returns Recommended for you */ readonly getRecommendedForYou: ( - queries: readonly RecommendedForYouQuery[], + queries: readonly RecommendedForYouParams[], requestOptions?: RequestOptions & SearchOptions ) => Readonly>>; };