From 29a4c8bfed83c6e3e2c56cf7ba81aa5f3f248ae0 Mon Sep 17 00:00:00 2001 From: Raed Date: Mon, 20 Nov 2023 10:59:17 +0100 Subject: [PATCH 1/7] feat(recommend): add recommended-for-you model --- .../client-common/src/__tests__/TestSuite.ts | 2 +- packages/recommend/src/builds/browser.ts | 2 ++ packages/recommend/src/builds/node.ts | 2 ++ .../src/methods/getRecommendedForYou.ts | 18 ++++++++++++++++++ packages/recommend/src/methods/index.ts | 1 + packages/recommend/src/types/RecommendModel.ts | 1 + .../src/types/RecommendedForYouQuery.ts | 3 +++ .../src/types/WithRecommendMethods.ts | 9 +++++++++ packages/recommend/src/types/index.ts | 1 + playground/browser/index.html | 1 + 10 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 packages/recommend/src/methods/getRecommendedForYou.ts create mode 100644 packages/recommend/src/types/RecommendedForYouQuery.ts diff --git a/packages/client-common/src/__tests__/TestSuite.ts b/packages/client-common/src/__tests__/TestSuite.ts index b33f3a79b..8ca4620e3 100644 --- a/packages/client-common/src/__tests__/TestSuite.ts +++ b/packages/client-common/src/__tests__/TestSuite.ts @@ -39,7 +39,7 @@ export class TestSuite { public indicesCount = 0; public constructor(testName?: string) { - this.ensureEnvironmentVariables(); + // this.ensureEnvironmentVariables(); this.testName = testName || ''; } diff --git a/packages/recommend/src/builds/browser.ts b/packages/recommend/src/builds/browser.ts index 7a28bcab7..a792941f2 100644 --- a/packages/recommend/src/builds/browser.ts +++ b/packages/recommend/src/builds/browser.ts @@ -12,6 +12,7 @@ import { getFrequentlyBoughtTogether, getLookingSimilar, getRecommendations, + getRecommendedForYou, getRelatedProducts, getTrendingFacets, getTrendingItems, @@ -57,6 +58,7 @@ export default function recommend( getTrendingFacets, getTrendingItems, getLookingSimilar, + getRecommendedForYou, }, }); } diff --git a/packages/recommend/src/builds/node.ts b/packages/recommend/src/builds/node.ts index 04017e60d..61f514d3e 100644 --- a/packages/recommend/src/builds/node.ts +++ b/packages/recommend/src/builds/node.ts @@ -11,6 +11,7 @@ import { getFrequentlyBoughtTogether, getLookingSimilar, getRecommendations, + getRecommendedForYou, getRelatedProducts, getTrendingFacets, getTrendingItems, @@ -51,6 +52,7 @@ export default function recommend( getTrendingFacets, getTrendingItems, getLookingSimilar, + getRecommendedForYou, }, }); } diff --git a/packages/recommend/src/methods/getRecommendedForYou.ts b/packages/recommend/src/methods/getRecommendedForYou.ts new file mode 100644 index 000000000..5f5c08630 --- /dev/null +++ b/packages/recommend/src/methods/getRecommendedForYou.ts @@ -0,0 +1,18 @@ +import { BaseRecommendClient, RecommendedForYouQuery, WithRecommendMethods } from '../types'; +import { getRecommendations } from './getRecommendations'; + +type GetRecommendedForYou = ( + base: BaseRecommendClient +) => WithRecommendMethods['getRecommendedForYou']; + +export const getRecommendedForYou: GetRecommendedForYou = base => { + return (queries: readonly RecommendedForYouQuery[], requestOptions) => { + return getRecommendations(base)( + queries.map(query => ({ + ...query, + model: 'recommended-for-you', + })), + requestOptions + ); + }; +}; diff --git a/packages/recommend/src/methods/index.ts b/packages/recommend/src/methods/index.ts index 31bd3988b..f12d1ea77 100644 --- a/packages/recommend/src/methods/index.ts +++ b/packages/recommend/src/methods/index.ts @@ -8,3 +8,4 @@ export * from './getRelatedProducts'; export * from './getTrendingFacets'; export * from './getTrendingItems'; export * from './getLookingSimilar'; +export * from './getRecommendedForYou'; diff --git a/packages/recommend/src/types/RecommendModel.ts b/packages/recommend/src/types/RecommendModel.ts index d921e71fa..b1f985d25 100644 --- a/packages/recommend/src/types/RecommendModel.ts +++ b/packages/recommend/src/types/RecommendModel.ts @@ -3,4 +3,5 @@ export type RecommendModel = | 'related-products' | 'bought-together' | 'looking-similar' + | 'recommended-for-you' | TrendingModel; diff --git a/packages/recommend/src/types/RecommendedForYouQuery.ts b/packages/recommend/src/types/RecommendedForYouQuery.ts new file mode 100644 index 000000000..ffdf5cca5 --- /dev/null +++ b/packages/recommend/src/types/RecommendedForYouQuery.ts @@ -0,0 +1,3 @@ +import { RecommendationsQuery } from './RecommendationsQuery'; + +export type RecommendedForYouQuery = Omit; diff --git a/packages/recommend/src/types/WithRecommendMethods.ts b/packages/recommend/src/types/WithRecommendMethods.ts index a2833670f..d0e226e8d 100644 --- a/packages/recommend/src/types/WithRecommendMethods.ts +++ b/packages/recommend/src/types/WithRecommendMethods.ts @@ -1,6 +1,7 @@ import { SearchOptions, SearchResponse } from '@algolia/client-search'; import { RequestOptions } from '@algolia/transporter'; +import { RecommendedForYouQuery } from '../builds/node'; import { FrequentlyBoughtTogetherQuery } from './FrequentlyBoughtTogetherQuery'; import { LookingSimilarQuery } from './LookingSimilarQuery'; import { RecommendationsQuery } from './RecommendationsQuery'; @@ -64,4 +65,12 @@ export type WithRecommendMethods = TType & { queries: readonly LookingSimilarQuery[], requestOptions?: RequestOptions & SearchOptions ) => Readonly>>; + + /** + * Returns Recommended for you + */ + readonly getRecommendedForYou: ( + queries: readonly RecommendedForYouQuery[], + requestOptions?: RequestOptions & SearchOptions + ) => Readonly>>; }; diff --git a/packages/recommend/src/types/index.ts b/packages/recommend/src/types/index.ts index f99bee2ad..767b31335 100644 --- a/packages/recommend/src/types/index.ts +++ b/packages/recommend/src/types/index.ts @@ -15,3 +15,4 @@ export * from './TrendingItemsQuery'; export * from './TrendingQuery'; export * from './WithRecommendMethods'; export * from './LookingSimilarQuery'; +export * from './RecommendedForYouQuery'; diff --git a/playground/browser/index.html b/playground/browser/index.html index 78944576b..1b3f6f54e 100644 --- a/playground/browser/index.html +++ b/playground/browser/index.html @@ -2,6 +2,7 @@ + From c46b16263b6b5fb34bedffb7a40182fb0bdf14aa Mon Sep 17 00:00:00 2001 From: Raed Date: Tue, 21 Nov 2023 12:02:43 +0100 Subject: [PATCH 2/7] add user-token and query --- .../src/methods/getRecommendations.ts | 11 +++++++-- .../src/methods/getRecommendedForYou.ts | 23 ++++++++++++++----- .../src/types/RecommendedForYouQuery.ts | 7 +++++- playground/browser/index.html | 21 ++++++++++++++++- scripts/prepare-playground.sh | 1 + 5 files changed, 53 insertions(+), 10 deletions(-) diff --git a/packages/recommend/src/methods/getRecommendations.ts b/packages/recommend/src/methods/getRecommendations.ts index 5f57595f4..b6b283197 100644 --- a/packages/recommend/src/methods/getRecommendations.ts +++ b/packages/recommend/src/methods/getRecommendations.ts @@ -1,6 +1,11 @@ import { MethodEnum } from '@algolia/requester-common'; -import { BaseRecommendClient, RecommendationsQuery, WithRecommendMethods } from '../types'; +import { + BaseRecommendClient, + RecommendationsQuery, + RecommendedForYouQuery, + WithRecommendMethods, +} from '../types'; import { TrendingQuery } from '../types/TrendingQuery'; type GetRecommendations = ( @@ -9,7 +14,9 @@ type GetRecommendations = ( export const getRecommendations: GetRecommendations = base => { return (queries: ReadonlyArray, requestOptions) => { - const requests: ReadonlyArray = 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 5f5c08630..2243580cc 100644 --- a/packages/recommend/src/methods/getRecommendedForYou.ts +++ b/packages/recommend/src/methods/getRecommendedForYou.ts @@ -1,5 +1,6 @@ +import { MethodEnum } from '@algolia/requester-common/src'; + import { BaseRecommendClient, RecommendedForYouQuery, WithRecommendMethods } from '../types'; -import { getRecommendations } from './getRecommendations'; type GetRecommendedForYou = ( base: BaseRecommendClient @@ -7,11 +8,21 @@ type GetRecommendedForYou = ( export const getRecommendedForYou: GetRecommendedForYou = base => { return (queries: readonly RecommendedForYouQuery[], requestOptions) => { - return getRecommendations(base)( - queries.map(query => ({ - ...query, - model: 'recommended-for-you', - })), + const requests: readonly RecommendedForYouQuery[] = queries.map(query => ({ + ...query, + model: 'recommended-for-you', + threshold: query.threshold || 0, + })); + + return base.transporter.read( + { + method: MethodEnum.Post, + path: '1/indexes/*/recommendations', + data: { + requests, + }, + cacheable: true, + }, requestOptions ); }; diff --git a/packages/recommend/src/types/RecommendedForYouQuery.ts b/packages/recommend/src/types/RecommendedForYouQuery.ts index ffdf5cca5..8a3901497 100644 --- a/packages/recommend/src/types/RecommendedForYouQuery.ts +++ b/packages/recommend/src/types/RecommendedForYouQuery.ts @@ -1,3 +1,8 @@ import { RecommendationsQuery } from './RecommendationsQuery'; -export type RecommendedForYouQuery = Omit; +export type RecommendedForYouQuery = Omit & { + /** + * A `userToken` to personalise recommendations. + */ + readonly userToken: string; +}; diff --git a/playground/browser/index.html b/playground/browser/index.html index 1b3f6f54e..7c2f36839 100644 --- a/playground/browser/index.html +++ b/playground/browser/index.html @@ -1,8 +1,27 @@ - + + + diff --git a/scripts/prepare-playground.sh b/scripts/prepare-playground.sh index 09bb055bb..9d189f4df 100755 --- a/scripts/prepare-playground.sh +++ b/scripts/prepare-playground.sh @@ -1,2 +1,3 @@ cp -a packages/algoliasearch/dist/algoliasearch-lite.umd* playground/browser-lite/. cp -a packages/algoliasearch/dist/algoliasearch.umd* playground/browser/. +cp -a packages/recommend/dist/recommend.umd* playground/browser/. From ef2c94e34968e023337c20d0d5ad50a5fbcb8b77 Mon Sep 17 00:00:00 2001 From: Raed Date: Thu, 23 Nov 2023 10:51:42 +0100 Subject: [PATCH 3/7] reset playground --- .../src/types/RecommendedForYouQuery.ts | 7 +------ playground/browser/index.html | 21 +------------------ 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/packages/recommend/src/types/RecommendedForYouQuery.ts b/packages/recommend/src/types/RecommendedForYouQuery.ts index 8a3901497..7ea9d685a 100644 --- a/packages/recommend/src/types/RecommendedForYouQuery.ts +++ b/packages/recommend/src/types/RecommendedForYouQuery.ts @@ -1,8 +1,3 @@ import { RecommendationsQuery } from './RecommendationsQuery'; -export type RecommendedForYouQuery = Omit & { - /** - * A `userToken` to personalise recommendations. - */ - readonly userToken: string; -}; +export type RecommendedForYouQuery = Omit; diff --git a/playground/browser/index.html b/playground/browser/index.html index 7c2f36839..1b3f6f54e 100644 --- a/playground/browser/index.html +++ b/playground/browser/index.html @@ -1,27 +1,8 @@ - + - - From 5a80f86395269debca61bc4fd189e82575b30358 Mon Sep 17 00:00:00 2001 From: Raed Date: Thu, 23 Nov 2023 10:56:22 +0100 Subject: [PATCH 4/7] reset ensureEnvironmentVariables --- packages/client-common/src/__tests__/TestSuite.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client-common/src/__tests__/TestSuite.ts b/packages/client-common/src/__tests__/TestSuite.ts index 8ca4620e3..b33f3a79b 100644 --- a/packages/client-common/src/__tests__/TestSuite.ts +++ b/packages/client-common/src/__tests__/TestSuite.ts @@ -39,7 +39,7 @@ export class TestSuite { public indicesCount = 0; public constructor(testName?: string) { - // this.ensureEnvironmentVariables(); + this.ensureEnvironmentVariables(); this.testName = testName || ''; } From 0ac31c93755286b2b370d1c15d6550d09efcda76 Mon Sep 17 00:00:00 2001 From: Raed Date: Thu, 23 Nov 2023 11:09:19 +0100 Subject: [PATCH 5/7] fix import issue --- packages/recommend/src/methods/getRecommendedForYou.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/recommend/src/methods/getRecommendedForYou.ts b/packages/recommend/src/methods/getRecommendedForYou.ts index 2243580cc..7f598c556 100644 --- a/packages/recommend/src/methods/getRecommendedForYou.ts +++ b/packages/recommend/src/methods/getRecommendedForYou.ts @@ -1,4 +1,4 @@ -import { MethodEnum } from '@algolia/requester-common/src'; +import { MethodEnum } from '@algolia/requester-common'; import { BaseRecommendClient, RecommendedForYouQuery, WithRecommendMethods } from '../types'; From 04f9fbc75d6d4bb48f0c8dcc1a000f0860bb1a45 Mon Sep 17 00:00:00 2001 From: Raed Date: Thu, 23 Nov 2023 13:34:12 +0100 Subject: [PATCH 6/7] change max size for recommend.umd.js --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8153dae9f..ed7cd44ce 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ }, { "path": "packages/recommend/dist/recommend.umd.js", - "maxSize": "4.3KB" + "maxSize": "4.32KB" } ] } From 071f2a8debdeda569d4827c968b076a0723a38c9 Mon Sep 17 00:00:00 2001 From: Raed Date: Thu, 23 Nov 2023 13:51:12 +0100 Subject: [PATCH 7/7] change max size for recommend.umd.js --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ed7cd44ce..1845e1192 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ }, { "path": "packages/recommend/dist/recommend.umd.js", - "maxSize": "4.32KB" + "maxSize": "4.4KB" } ] }