From 36bbcfc9bdaef47b59731f2eff97f2f14a6a7870 Mon Sep 17 00:00:00 2001 From: Sophie Manley Date: Fri, 25 Feb 2022 11:39:18 +0100 Subject: [PATCH 1/6] feat(recommend): Add trending types and methods --- .../src/__tests__/getTrendingFacets.test.ts | 46 ++++++++++++++++++ .../__tests__/getTrendingGlobalItems.test.ts | 44 +++++++++++++++++ .../getTrendingItemsForFacet.test.ts | 48 +++++++++++++++++++ packages/recommend/src/builds/browser.ts | 12 ++++- packages/recommend/src/builds/node.ts | 12 ++++- .../src/methods/getTrendingFacets.ts | 18 +++++++ .../src/methods/getTrendingGlobalItems.ts | 18 +++++++ .../src/methods/getTrendingItemsForFacet.ts | 18 +++++++ packages/recommend/src/methods/index.ts | 3 ++ .../types/FrequentlyBoughtTogetherQuery.ts | 2 +- .../recommend/src/types/RecommendModel.ts | 6 ++- .../src/types/RecommendationsQuery.ts | 12 ++++- .../src/types/RelatedProductsQuery.ts | 2 +- .../src/types/TrendingFacetsQuery.ts | 3 ++ .../src/types/TrendingGlobalItemsQuery.ts | 6 +++ .../src/types/TrendingItemsForFacetQuery.ts | 3 ++ .../src/types/WithRecommendMethods.ts | 27 +++++++++++ packages/recommend/src/types/index.ts | 3 ++ 18 files changed, 277 insertions(+), 6 deletions(-) create mode 100644 packages/recommend/src/__tests__/getTrendingFacets.test.ts create mode 100644 packages/recommend/src/__tests__/getTrendingGlobalItems.test.ts create mode 100644 packages/recommend/src/__tests__/getTrendingItemsForFacet.test.ts create mode 100644 packages/recommend/src/methods/getTrendingFacets.ts create mode 100644 packages/recommend/src/methods/getTrendingGlobalItems.ts create mode 100644 packages/recommend/src/methods/getTrendingItemsForFacet.ts create mode 100644 packages/recommend/src/types/TrendingFacetsQuery.ts create mode 100644 packages/recommend/src/types/TrendingGlobalItemsQuery.ts create mode 100644 packages/recommend/src/types/TrendingItemsForFacetQuery.ts diff --git a/packages/recommend/src/__tests__/getTrendingFacets.test.ts b/packages/recommend/src/__tests__/getTrendingFacets.test.ts new file mode 100644 index 000000000..69a13f2cb --- /dev/null +++ b/packages/recommend/src/__tests__/getTrendingFacets.test.ts @@ -0,0 +1,46 @@ +import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; + +const recommend = new TestSuite('recommend').recommend; + +function createMockedClient() { + const client = recommend('appId', 'apiKey'); + jest.spyOn(client.transporter, 'read').mockImplementation(() => Promise.resolve()); + + return client; +} + +describe('getTrendingFacets', () => { + test('builds the request', async () => { + const client = createMockedClient(); + + await client.getTrendingFacets( + [ + { + indexName: 'products', + facetName: 'company', + }, + ], + {} + ); + + expect(client.transporter.read).toHaveBeenCalledTimes(1); + expect(client.transporter.read).toHaveBeenCalledWith( + { + cacheable: true, + data: { + requests: [ + { + indexName: 'products', + model: 'trending-facets', + facetName: 'company', + threshold: 0, + }, + ], + }, + method: 'POST', + path: '1/indexes/*/recommendations', + }, + {} + ); + }); +}); diff --git a/packages/recommend/src/__tests__/getTrendingGlobalItems.test.ts b/packages/recommend/src/__tests__/getTrendingGlobalItems.test.ts new file mode 100644 index 000000000..7dbdc0c45 --- /dev/null +++ b/packages/recommend/src/__tests__/getTrendingGlobalItems.test.ts @@ -0,0 +1,44 @@ +import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; + +const recommend = new TestSuite('recommend').recommend; + +function createMockedClient() { + const client = recommend('appId', 'apiKey'); + jest.spyOn(client.transporter, 'read').mockImplementation(() => Promise.resolve()); + + return client; +} + +describe('getTrendingGlobalItems', () => { + test('builds the request', async () => { + const client = createMockedClient(); + + await client.getTrendingGlobalItems( + [ + { + indexName: 'products', + }, + ], + {} + ); + + expect(client.transporter.read).toHaveBeenCalledTimes(1); + expect(client.transporter.read).toHaveBeenCalledWith( + { + cacheable: true, + data: { + requests: [ + { + indexName: 'products', + model: 'trending-items', + threshold: 0, + }, + ], + }, + method: 'POST', + path: '1/indexes/*/recommendations', + }, + {} + ); + }); +}); diff --git a/packages/recommend/src/__tests__/getTrendingItemsForFacet.test.ts b/packages/recommend/src/__tests__/getTrendingItemsForFacet.test.ts new file mode 100644 index 000000000..44e0e76b0 --- /dev/null +++ b/packages/recommend/src/__tests__/getTrendingItemsForFacet.test.ts @@ -0,0 +1,48 @@ +import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; + +const recommend = new TestSuite('recommend').recommend; + +function createMockedClient() { + const client = recommend('appId', 'apiKey'); + jest.spyOn(client.transporter, 'read').mockImplementation(() => Promise.resolve()); + + return client; +} + +describe('getTrendingItemsForFacet', () => { + test('builds the request', async () => { + const client = createMockedClient(); + + await client.getTrendingItemsForFacet( + [ + { + indexName: 'products', + facetName: 'company', + facetValue: 'tesla', + }, + ], + {} + ); + + expect(client.transporter.read).toHaveBeenCalledTimes(1); + expect(client.transporter.read).toHaveBeenCalledWith( + { + cacheable: true, + data: { + requests: [ + { + indexName: 'products', + model: 'trending-items', + facetName: 'company', + facetValue: 'tesla', + threshold: 0, + }, + ], + }, + method: 'POST', + path: '1/indexes/*/recommendations', + }, + {} + ); + }); +}); diff --git a/packages/recommend/src/builds/browser.ts b/packages/recommend/src/builds/browser.ts index 649c321d6..216389d2a 100644 --- a/packages/recommend/src/builds/browser.ts +++ b/packages/recommend/src/builds/browser.ts @@ -8,7 +8,14 @@ import { createBrowserXhrRequester } from '@algolia/requester-browser-xhr'; import { createUserAgent } from '@algolia/transporter'; import { createRecommendClient } from '../createRecommendClient'; -import { getFrequentlyBoughtTogether, getRecommendations, getRelatedProducts } from '../methods'; +import { + getFrequentlyBoughtTogether, + getRecommendations, + getRelatedProducts, + getTrendingFacets, + getTrendingGlobalItems, + getTrendingItemsForFacet, +} from '../methods'; import { BaseRecommendClient, RecommendOptions, WithRecommendMethods } from '../types'; export default function recommend( @@ -47,6 +54,9 @@ export default function recommend( getFrequentlyBoughtTogether, getRecommendations, getRelatedProducts, + getTrendingFacets, + getTrendingGlobalItems, + getTrendingItemsForFacet, }, }); } diff --git a/packages/recommend/src/builds/node.ts b/packages/recommend/src/builds/node.ts index 6cfbe1584..ae59a6c19 100644 --- a/packages/recommend/src/builds/node.ts +++ b/packages/recommend/src/builds/node.ts @@ -7,7 +7,14 @@ import { createNodeHttpRequester } from '@algolia/requester-node-http'; import { createUserAgent } from '@algolia/transporter'; import { createRecommendClient } from '../createRecommendClient'; -import { getFrequentlyBoughtTogether, getRecommendations, getRelatedProducts } from '../methods'; +import { + getFrequentlyBoughtTogether, + getRecommendations, + getRelatedProducts, + getTrendingFacets, + getTrendingGlobalItems, + getTrendingItemsForFacet, +} from '../methods'; import { BaseRecommendClient, RecommendOptions, WithRecommendMethods } from '../types'; export default function recommend( @@ -41,6 +48,9 @@ export default function recommend( getFrequentlyBoughtTogether, getRecommendations, getRelatedProducts, + getTrendingFacets, + getTrendingGlobalItems, + getTrendingItemsForFacet, }, }); } diff --git a/packages/recommend/src/methods/getTrendingFacets.ts b/packages/recommend/src/methods/getTrendingFacets.ts new file mode 100644 index 000000000..24d833a03 --- /dev/null +++ b/packages/recommend/src/methods/getTrendingFacets.ts @@ -0,0 +1,18 @@ +import { BaseRecommendClient, TrendingFacetsQuery, WithRecommendMethods } from '../types'; +import { getRecommendations } from './getRecommendations'; + +type GetTrendingFacets = ( + base: BaseRecommendClient +) => WithRecommendMethods['getTrendingFacets']; + +export const getTrendingFacets: GetTrendingFacets = base => { + return (queries: readonly TrendingFacetsQuery[], requestOptions) => { + return getRecommendations(base)( + queries.map(query => ({ + ...query, + model: 'trending-facets', + })), + requestOptions + ); + }; +}; diff --git a/packages/recommend/src/methods/getTrendingGlobalItems.ts b/packages/recommend/src/methods/getTrendingGlobalItems.ts new file mode 100644 index 000000000..1d575debc --- /dev/null +++ b/packages/recommend/src/methods/getTrendingGlobalItems.ts @@ -0,0 +1,18 @@ +import { BaseRecommendClient, TrendingGlobalItemsQuery, WithRecommendMethods } from '../types'; +import { getRecommendations } from './getRecommendations'; + +type GetTrendingGlobalItems = ( + base: BaseRecommendClient +) => WithRecommendMethods['getTrendingGlobalItems']; + +export const getTrendingGlobalItems: GetTrendingGlobalItems = base => { + return (queries: readonly TrendingGlobalItemsQuery[], requestOptions) => { + return getRecommendations(base)( + queries.map(query => ({ + ...query, + model: 'trending-items', + })), + requestOptions + ); + }; +}; diff --git a/packages/recommend/src/methods/getTrendingItemsForFacet.ts b/packages/recommend/src/methods/getTrendingItemsForFacet.ts new file mode 100644 index 000000000..c87572060 --- /dev/null +++ b/packages/recommend/src/methods/getTrendingItemsForFacet.ts @@ -0,0 +1,18 @@ +import { BaseRecommendClient, TrendingItemsForFacetQuery, WithRecommendMethods } from '../types'; +import { getRecommendations } from './getRecommendations'; + +type GetTrendingItemsForFacet = ( + base: BaseRecommendClient +) => WithRecommendMethods['getTrendingItemsForFacet']; + +export const getTrendingItemsForFacet: GetTrendingItemsForFacet = base => { + return (queries: readonly TrendingItemsForFacetQuery[], requestOptions) => { + return getRecommendations(base)( + queries.map(query => ({ + ...query, + model: 'trending-items', + })), + requestOptions + ); + }; +}; diff --git a/packages/recommend/src/methods/index.ts b/packages/recommend/src/methods/index.ts index a53053aef..f320c3fa5 100644 --- a/packages/recommend/src/methods/index.ts +++ b/packages/recommend/src/methods/index.ts @@ -5,3 +5,6 @@ export * from './getFrequentlyBoughtTogether'; export * from './getRecommendations'; export * from './getRelatedProducts'; +export * from './getTrendingFacets'; +export * from './getTrendingGlobalItems'; +export * from './getTrendingItemsForFacet'; diff --git a/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts b/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts index 829abd2a8..67fd21788 100644 --- a/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts +++ b/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts @@ -2,5 +2,5 @@ import { RecommendationsQuery } from './RecommendationsQuery'; export type FrequentlyBoughtTogetherQuery = Omit< RecommendationsQuery, - 'model' | 'fallbackParameters' + 'model' | 'fallbackParameters' | 'facetName' | 'facetValue' >; diff --git a/packages/recommend/src/types/RecommendModel.ts b/packages/recommend/src/types/RecommendModel.ts index 8e3cdfcdf..eb2bf4feb 100644 --- a/packages/recommend/src/types/RecommendModel.ts +++ b/packages/recommend/src/types/RecommendModel.ts @@ -1 +1,5 @@ -export type RecommendModel = 'related-products' | 'bought-together'; +export type RecommendModel = + | 'related-products' + | 'bought-together' + | 'trending-items' + | 'trending-facets'; diff --git a/packages/recommend/src/types/RecommendationsQuery.ts b/packages/recommend/src/types/RecommendationsQuery.ts index 4d269f869..2c7625a82 100644 --- a/packages/recommend/src/types/RecommendationsQuery.ts +++ b/packages/recommend/src/types/RecommendationsQuery.ts @@ -15,7 +15,7 @@ export type RecommendationsQuery = { /** * The `objectID` of the item to get recommendations for. */ - readonly objectID: string; + readonly objectID?: string; /** * Threshold for the recommendations confidence score (between 0 and 100). Only recommendations with a greater score are returned. @@ -38,4 +38,14 @@ export type RecommendationsQuery = { * Additional filters to use as fallback when there aren’t enough recommendations. */ readonly fallbackParameters?: RecommendSearchOptions; + + /** + * Used for trending model + */ + readonly facetName?: string; + + /** + * Used for trending model + */ + readonly facetValue?: string; }; diff --git a/packages/recommend/src/types/RelatedProductsQuery.ts b/packages/recommend/src/types/RelatedProductsQuery.ts index d4fa107a5..f1bfaf5c7 100644 --- a/packages/recommend/src/types/RelatedProductsQuery.ts +++ b/packages/recommend/src/types/RelatedProductsQuery.ts @@ -1,3 +1,3 @@ import { RecommendationsQuery } from './RecommendationsQuery'; -export type RelatedProductsQuery = Omit; +export type RelatedProductsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingFacetsQuery.ts b/packages/recommend/src/types/TrendingFacetsQuery.ts new file mode 100644 index 000000000..8ec5dbb39 --- /dev/null +++ b/packages/recommend/src/types/TrendingFacetsQuery.ts @@ -0,0 +1,3 @@ +import { RecommendationsQuery } from './RecommendationsQuery'; + +export type TrendingFacetsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingGlobalItemsQuery.ts b/packages/recommend/src/types/TrendingGlobalItemsQuery.ts new file mode 100644 index 000000000..1a410067c --- /dev/null +++ b/packages/recommend/src/types/TrendingGlobalItemsQuery.ts @@ -0,0 +1,6 @@ +import { RecommendationsQuery } from './RecommendationsQuery'; + +export type TrendingGlobalItemsQuery = Omit< + RecommendationsQuery, + 'model' | 'objectID' | 'facetName' | 'facetValue' +>; diff --git a/packages/recommend/src/types/TrendingItemsForFacetQuery.ts b/packages/recommend/src/types/TrendingItemsForFacetQuery.ts new file mode 100644 index 000000000..2b3ec511c --- /dev/null +++ b/packages/recommend/src/types/TrendingItemsForFacetQuery.ts @@ -0,0 +1,3 @@ +import { RecommendationsQuery } from './RecommendationsQuery'; + +export type TrendingItemsForFacetQuery = Omit; diff --git a/packages/recommend/src/types/WithRecommendMethods.ts b/packages/recommend/src/types/WithRecommendMethods.ts index cb673b4bc..0c9bcf146 100644 --- a/packages/recommend/src/types/WithRecommendMethods.ts +++ b/packages/recommend/src/types/WithRecommendMethods.ts @@ -4,6 +4,9 @@ import { RequestOptions } from '@algolia/transporter'; import { FrequentlyBoughtTogetherQuery } from './FrequentlyBoughtTogetherQuery'; import { RecommendationsQuery } from './RecommendationsQuery'; import { RelatedProductsQuery } from './RelatedProductsQuery'; +import { TrendingFacetsQuery } from './TrendingFacetsQuery'; +import { TrendingGlobalItemsQuery } from './TrendingGlobalItemsQuery'; +import { TrendingItemsForFacetQuery } from './TrendingItemsForFacetQuery'; export type WithRecommendMethods = TType & { /** @@ -29,4 +32,28 @@ export type WithRecommendMethods = TType & { queries: readonly FrequentlyBoughtTogetherQuery[], requestOptions?: RequestOptions & SearchOptions ) => Readonly>>; + + /** + * Returns trending items + */ + readonly getTrendingGlobalItems: ( + queries: readonly TrendingGlobalItemsQuery[], + requestOptions?: RequestOptions & SearchOptions + ) => Readonly>>; + + /** + * Returns trending items per facet + */ + readonly getTrendingItemsForFacet: ( + queries: readonly TrendingItemsForFacetQuery[], + requestOptions?: RequestOptions & SearchOptions + ) => Readonly>>; + + /** + * Returns trending items per facet + */ + readonly getTrendingFacets: ( + queries: readonly TrendingFacetsQuery[], + requestOptions?: RequestOptions & SearchOptions + ) => Readonly>>; }; diff --git a/packages/recommend/src/types/index.ts b/packages/recommend/src/types/index.ts index 98035bb8f..8a93be8e7 100644 --- a/packages/recommend/src/types/index.ts +++ b/packages/recommend/src/types/index.ts @@ -10,4 +10,7 @@ export * from './RecommendOptions'; export * from './RecommendSearchOptions'; export * from './RecommendationsQuery'; export * from './RelatedProductsQuery'; +export * from './TrendingFacetsQuery'; +export * from './TrendingGlobalItemsQuery'; +export * from './TrendingItemsForFacetQuery'; export * from './WithRecommendMethods'; From 727c78735710f17bc561338a3a8f606597774f19 Mon Sep 17 00:00:00 2001 From: Sophie Manley Date: Mon, 28 Feb 2022 16:35:07 +0100 Subject: [PATCH 2/6] fix(recommend): Add a trendingQuery type --- .../src/methods/getTrendingFacets.ts | 26 ++++++++--- .../src/methods/getTrendingGlobalItems.ts | 26 ++++++++--- .../src/methods/getTrendingItemsForFacet.ts | 5 +- .../types/FrequentlyBoughtTogetherQuery.ts | 2 +- .../recommend/src/types/RecommendModel.ts | 7 +-- .../src/types/RecommendationsQuery.ts | 12 +---- .../src/types/RelatedProductsQuery.ts | 2 +- .../src/types/TrendingFacetsQuery.ts | 4 +- .../src/types/TrendingGlobalItemsQuery.ts | 7 +-- .../src/types/TrendingItemsForFacetQuery.ts | 4 +- packages/recommend/src/types/TrendingQuery.ts | 46 +++++++++++++++++++ packages/recommend/src/types/index.ts | 1 + 12 files changed, 100 insertions(+), 42 deletions(-) create mode 100644 packages/recommend/src/types/TrendingQuery.ts diff --git a/packages/recommend/src/methods/getTrendingFacets.ts b/packages/recommend/src/methods/getTrendingFacets.ts index 24d833a03..0bf3b279e 100644 --- a/packages/recommend/src/methods/getTrendingFacets.ts +++ b/packages/recommend/src/methods/getTrendingFacets.ts @@ -1,5 +1,6 @@ +import { MethodEnum } from '@algolia/requester-common'; + import { BaseRecommendClient, TrendingFacetsQuery, WithRecommendMethods } from '../types'; -import { getRecommendations } from './getRecommendations'; type GetTrendingFacets = ( base: BaseRecommendClient @@ -7,11 +8,24 @@ type GetTrendingFacets = ( export const getTrendingFacets: GetTrendingFacets = base => { return (queries: readonly TrendingFacetsQuery[], requestOptions) => { - return getRecommendations(base)( - queries.map(query => ({ - ...query, - model: 'trending-facets', - })), + const requests: readonly TrendingFacetsQuery[] = queries.map(query => ({ + ...query, + model: 'trending-facets', + // 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 + // so that users don't have to provide a value. + 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/methods/getTrendingGlobalItems.ts b/packages/recommend/src/methods/getTrendingGlobalItems.ts index 1d575debc..9165744ae 100644 --- a/packages/recommend/src/methods/getTrendingGlobalItems.ts +++ b/packages/recommend/src/methods/getTrendingGlobalItems.ts @@ -1,5 +1,6 @@ +import { MethodEnum } from '@algolia/requester-common'; + import { BaseRecommendClient, TrendingGlobalItemsQuery, WithRecommendMethods } from '../types'; -import { getRecommendations } from './getRecommendations'; type GetTrendingGlobalItems = ( base: BaseRecommendClient @@ -7,11 +8,24 @@ type GetTrendingGlobalItems = ( export const getTrendingGlobalItems: GetTrendingGlobalItems = base => { return (queries: readonly TrendingGlobalItemsQuery[], requestOptions) => { - return getRecommendations(base)( - queries.map(query => ({ - ...query, - model: 'trending-items', - })), + const requests: readonly TrendingGlobalItemsQuery[] = queries.map(query => ({ + ...query, + model: 'trending-items', + // 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 + // so that users don't have to provide a value. + 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/methods/getTrendingItemsForFacet.ts b/packages/recommend/src/methods/getTrendingItemsForFacet.ts index c87572060..6e2dec32b 100644 --- a/packages/recommend/src/methods/getTrendingItemsForFacet.ts +++ b/packages/recommend/src/methods/getTrendingItemsForFacet.ts @@ -1,5 +1,5 @@ import { BaseRecommendClient, TrendingItemsForFacetQuery, WithRecommendMethods } from '../types'; -import { getRecommendations } from './getRecommendations'; +import { getTrendingGlobalItems } from '.'; type GetTrendingItemsForFacet = ( base: BaseRecommendClient @@ -7,10 +7,9 @@ type GetTrendingItemsForFacet = ( export const getTrendingItemsForFacet: GetTrendingItemsForFacet = base => { return (queries: readonly TrendingItemsForFacetQuery[], requestOptions) => { - return getRecommendations(base)( + return getTrendingGlobalItems(base)( queries.map(query => ({ ...query, - model: 'trending-items', })), requestOptions ); diff --git a/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts b/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts index 67fd21788..829abd2a8 100644 --- a/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts +++ b/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts @@ -2,5 +2,5 @@ import { RecommendationsQuery } from './RecommendationsQuery'; export type FrequentlyBoughtTogetherQuery = Omit< RecommendationsQuery, - 'model' | 'fallbackParameters' | 'facetName' | 'facetValue' + 'model' | 'fallbackParameters' >; diff --git a/packages/recommend/src/types/RecommendModel.ts b/packages/recommend/src/types/RecommendModel.ts index eb2bf4feb..7f732f538 100644 --- a/packages/recommend/src/types/RecommendModel.ts +++ b/packages/recommend/src/types/RecommendModel.ts @@ -1,5 +1,2 @@ -export type RecommendModel = - | 'related-products' - | 'bought-together' - | 'trending-items' - | 'trending-facets'; +export type RecommendModel = 'related-products' | 'bought-together'; +export type TrendingModel = 'trending-items' | 'trending-facets'; diff --git a/packages/recommend/src/types/RecommendationsQuery.ts b/packages/recommend/src/types/RecommendationsQuery.ts index 2c7625a82..4d269f869 100644 --- a/packages/recommend/src/types/RecommendationsQuery.ts +++ b/packages/recommend/src/types/RecommendationsQuery.ts @@ -15,7 +15,7 @@ export type RecommendationsQuery = { /** * The `objectID` of the item to get recommendations for. */ - readonly objectID?: string; + readonly objectID: string; /** * Threshold for the recommendations confidence score (between 0 and 100). Only recommendations with a greater score are returned. @@ -38,14 +38,4 @@ export type RecommendationsQuery = { * Additional filters to use as fallback when there aren’t enough recommendations. */ readonly fallbackParameters?: RecommendSearchOptions; - - /** - * Used for trending model - */ - readonly facetName?: string; - - /** - * Used for trending model - */ - readonly facetValue?: string; }; diff --git a/packages/recommend/src/types/RelatedProductsQuery.ts b/packages/recommend/src/types/RelatedProductsQuery.ts index f1bfaf5c7..d4fa107a5 100644 --- a/packages/recommend/src/types/RelatedProductsQuery.ts +++ b/packages/recommend/src/types/RelatedProductsQuery.ts @@ -1,3 +1,3 @@ import { RecommendationsQuery } from './RecommendationsQuery'; -export type RelatedProductsQuery = Omit; +export type RelatedProductsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingFacetsQuery.ts b/packages/recommend/src/types/TrendingFacetsQuery.ts index 8ec5dbb39..1c25ec4b8 100644 --- a/packages/recommend/src/types/TrendingFacetsQuery.ts +++ b/packages/recommend/src/types/TrendingFacetsQuery.ts @@ -1,3 +1,3 @@ -import { RecommendationsQuery } from './RecommendationsQuery'; +import { TrendingQuery } from './TrendingQuery'; -export type TrendingFacetsQuery = Omit; +export type TrendingFacetsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingGlobalItemsQuery.ts b/packages/recommend/src/types/TrendingGlobalItemsQuery.ts index 1a410067c..16e74b380 100644 --- a/packages/recommend/src/types/TrendingGlobalItemsQuery.ts +++ b/packages/recommend/src/types/TrendingGlobalItemsQuery.ts @@ -1,6 +1,3 @@ -import { RecommendationsQuery } from './RecommendationsQuery'; +import { TrendingQuery } from './TrendingQuery'; -export type TrendingGlobalItemsQuery = Omit< - RecommendationsQuery, - 'model' | 'objectID' | 'facetName' | 'facetValue' ->; +export type TrendingGlobalItemsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingItemsForFacetQuery.ts b/packages/recommend/src/types/TrendingItemsForFacetQuery.ts index 2b3ec511c..8b88ac4d9 100644 --- a/packages/recommend/src/types/TrendingItemsForFacetQuery.ts +++ b/packages/recommend/src/types/TrendingItemsForFacetQuery.ts @@ -1,3 +1,3 @@ -import { RecommendationsQuery } from './RecommendationsQuery'; +import { TrendingQuery } from './TrendingQuery'; -export type TrendingItemsForFacetQuery = Omit; +export type TrendingItemsForFacetQuery = Omit; diff --git a/packages/recommend/src/types/TrendingQuery.ts b/packages/recommend/src/types/TrendingQuery.ts new file mode 100644 index 000000000..c32f450c8 --- /dev/null +++ b/packages/recommend/src/types/TrendingQuery.ts @@ -0,0 +1,46 @@ +import { TrendingModel } from './RecommendModel'; +import { RecommendSearchOptions } from './RecommendSearchOptions'; + +export type TrendingQuery = { + /** + * The name of the target index. + */ + readonly indexName: string; + + /** + * The name of the Recommendation model to use. + */ + readonly model: TrendingModel; + + /** + * Threshold for the recommendations confidence score (between 0 and 100). Only recommendations with a greater score are returned. + */ + readonly threshold?: number; + + /** + * How many recommendations to retrieve. + */ + readonly maxRecommendations?: number; + + /** + * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. + */ + readonly queryParameters?: RecommendSearchOptions; + + /** + * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. + * + * Additional filters to use as fallback when there aren’t enough recommendations. + */ + readonly fallbackParameters?: RecommendSearchOptions; + + /** + * Used for trending model + */ + readonly facetName: string; + + /** + * Used for trending model + */ + readonly facetValue: string; +}; diff --git a/packages/recommend/src/types/index.ts b/packages/recommend/src/types/index.ts index 8a93be8e7..9e4c8d6e2 100644 --- a/packages/recommend/src/types/index.ts +++ b/packages/recommend/src/types/index.ts @@ -13,4 +13,5 @@ export * from './RelatedProductsQuery'; export * from './TrendingFacetsQuery'; export * from './TrendingGlobalItemsQuery'; export * from './TrendingItemsForFacetQuery'; +export * from './TrendingQuery'; export * from './WithRecommendMethods'; From b1f77944a2dff648df874ccf5ac8e28b782b09eb Mon Sep 17 00:00:00 2001 From: Sophie Manley Date: Mon, 28 Feb 2022 17:52:02 +0100 Subject: [PATCH 3/6] feat(recommend): increase bundle size --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 13528daa4..aca6d9b1c 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ }, { "path": "packages/recommend/dist/recommend.umd.js", - "maxSize": "4.1KB" + "maxSize": "4.2KB" } ] } From d64940df55610d43cbb2498026c7347cfa5d09b3 Mon Sep 17 00:00:00 2001 From: Sophie Manley Date: Mon, 7 Mar 2022 16:24:55 +0100 Subject: [PATCH 4/6] fix: remove TrendingType --- package.json | 2 +- .../src/methods/getTrendingItemsForFacet.ts | 5 ++ .../types/FrequentlyBoughtTogetherQuery.ts | 5 +- .../recommend/src/types/RecommendModel.ts | 2 +- .../src/types/RecommendationsQuery.ts | 12 ++++- .../src/types/RelatedProductsQuery.ts | 6 ++- .../src/types/TrendingFacetsQuery.ts | 5 +- .../src/types/TrendingGlobalItemsQuery.ts | 7 ++- .../src/types/TrendingItemsForFacetQuery.ts | 5 +- packages/recommend/src/types/TrendingQuery.ts | 46 ------------------- packages/recommend/src/types/index.ts | 1 - 11 files changed, 37 insertions(+), 59 deletions(-) delete mode 100644 packages/recommend/src/types/TrendingQuery.ts diff --git a/package.json b/package.json index 13528daa4..aca6d9b1c 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ }, { "path": "packages/recommend/dist/recommend.umd.js", - "maxSize": "4.1KB" + "maxSize": "4.2KB" } ] } diff --git a/packages/recommend/src/methods/getTrendingItemsForFacet.ts b/packages/recommend/src/methods/getTrendingItemsForFacet.ts index 6e2dec32b..055d52f45 100644 --- a/packages/recommend/src/methods/getTrendingItemsForFacet.ts +++ b/packages/recommend/src/methods/getTrendingItemsForFacet.ts @@ -10,6 +10,11 @@ export const getTrendingItemsForFacet: GetTrendingItemsForFacet = base => { return getTrendingGlobalItems(base)( queries.map(query => ({ ...query, + model: 'trending-items', + // 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 + // so that users don't have to provide a value. + threshold: query.threshold || 0, })), requestOptions ); diff --git a/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts b/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts index 829abd2a8..7a2a4cf74 100644 --- a/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts +++ b/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts @@ -2,5 +2,6 @@ import { RecommendationsQuery } from './RecommendationsQuery'; export type FrequentlyBoughtTogetherQuery = Omit< RecommendationsQuery, - 'model' | 'fallbackParameters' ->; + 'model' | 'fallbackParameters' | 'facetName' | 'facetValue' +> & + Required>; diff --git a/packages/recommend/src/types/RecommendModel.ts b/packages/recommend/src/types/RecommendModel.ts index 7f732f538..de574598f 100644 --- a/packages/recommend/src/types/RecommendModel.ts +++ b/packages/recommend/src/types/RecommendModel.ts @@ -1,2 +1,2 @@ -export type RecommendModel = 'related-products' | 'bought-together'; +export type RecommendModel = 'related-products' | 'bought-together' | TrendingModel; export type TrendingModel = 'trending-items' | 'trending-facets'; diff --git a/packages/recommend/src/types/RecommendationsQuery.ts b/packages/recommend/src/types/RecommendationsQuery.ts index 4d269f869..2c7625a82 100644 --- a/packages/recommend/src/types/RecommendationsQuery.ts +++ b/packages/recommend/src/types/RecommendationsQuery.ts @@ -15,7 +15,7 @@ export type RecommendationsQuery = { /** * The `objectID` of the item to get recommendations for. */ - readonly objectID: string; + readonly objectID?: string; /** * Threshold for the recommendations confidence score (between 0 and 100). Only recommendations with a greater score are returned. @@ -38,4 +38,14 @@ export type RecommendationsQuery = { * Additional filters to use as fallback when there aren’t enough recommendations. */ readonly fallbackParameters?: RecommendSearchOptions; + + /** + * Used for trending model + */ + readonly facetName?: string; + + /** + * Used for trending model + */ + readonly facetValue?: string; }; diff --git a/packages/recommend/src/types/RelatedProductsQuery.ts b/packages/recommend/src/types/RelatedProductsQuery.ts index d4fa107a5..c207d7533 100644 --- a/packages/recommend/src/types/RelatedProductsQuery.ts +++ b/packages/recommend/src/types/RelatedProductsQuery.ts @@ -1,3 +1,7 @@ import { RecommendationsQuery } from './RecommendationsQuery'; -export type RelatedProductsQuery = Omit; +export type RelatedProductsQuery = Omit< + RecommendationsQuery, + 'model' | 'facetName' | 'facetValue' +> & + Required>; diff --git a/packages/recommend/src/types/TrendingFacetsQuery.ts b/packages/recommend/src/types/TrendingFacetsQuery.ts index 1c25ec4b8..7ea6f3201 100644 --- a/packages/recommend/src/types/TrendingFacetsQuery.ts +++ b/packages/recommend/src/types/TrendingFacetsQuery.ts @@ -1,3 +1,4 @@ -import { TrendingQuery } from './TrendingQuery'; +import { RecommendationsQuery } from './RecommendationsQuery'; -export type TrendingFacetsQuery = Omit; +export type TrendingFacetsQuery = Omit & + Required>; diff --git a/packages/recommend/src/types/TrendingGlobalItemsQuery.ts b/packages/recommend/src/types/TrendingGlobalItemsQuery.ts index 16e74b380..1a410067c 100644 --- a/packages/recommend/src/types/TrendingGlobalItemsQuery.ts +++ b/packages/recommend/src/types/TrendingGlobalItemsQuery.ts @@ -1,3 +1,6 @@ -import { TrendingQuery } from './TrendingQuery'; +import { RecommendationsQuery } from './RecommendationsQuery'; -export type TrendingGlobalItemsQuery = Omit; +export type TrendingGlobalItemsQuery = Omit< + RecommendationsQuery, + 'model' | 'objectID' | 'facetName' | 'facetValue' +>; diff --git a/packages/recommend/src/types/TrendingItemsForFacetQuery.ts b/packages/recommend/src/types/TrendingItemsForFacetQuery.ts index 8b88ac4d9..4afd3fd51 100644 --- a/packages/recommend/src/types/TrendingItemsForFacetQuery.ts +++ b/packages/recommend/src/types/TrendingItemsForFacetQuery.ts @@ -1,3 +1,4 @@ -import { TrendingQuery } from './TrendingQuery'; +import { RecommendationsQuery } from './RecommendationsQuery'; -export type TrendingItemsForFacetQuery = Omit; +export type TrendingItemsForFacetQuery = Omit & + Required>; diff --git a/packages/recommend/src/types/TrendingQuery.ts b/packages/recommend/src/types/TrendingQuery.ts deleted file mode 100644 index c32f450c8..000000000 --- a/packages/recommend/src/types/TrendingQuery.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { TrendingModel } from './RecommendModel'; -import { RecommendSearchOptions } from './RecommendSearchOptions'; - -export type TrendingQuery = { - /** - * The name of the target index. - */ - readonly indexName: string; - - /** - * The name of the Recommendation model to use. - */ - readonly model: TrendingModel; - - /** - * Threshold for the recommendations confidence score (between 0 and 100). Only recommendations with a greater score are returned. - */ - readonly threshold?: number; - - /** - * How many recommendations to retrieve. - */ - readonly maxRecommendations?: number; - - /** - * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. - */ - readonly queryParameters?: RecommendSearchOptions; - - /** - * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. - * - * Additional filters to use as fallback when there aren’t enough recommendations. - */ - readonly fallbackParameters?: RecommendSearchOptions; - - /** - * Used for trending model - */ - readonly facetName: string; - - /** - * Used for trending model - */ - readonly facetValue: string; -}; diff --git a/packages/recommend/src/types/index.ts b/packages/recommend/src/types/index.ts index 9e4c8d6e2..8a93be8e7 100644 --- a/packages/recommend/src/types/index.ts +++ b/packages/recommend/src/types/index.ts @@ -13,5 +13,4 @@ export * from './RelatedProductsQuery'; export * from './TrendingFacetsQuery'; export * from './TrendingGlobalItemsQuery'; export * from './TrendingItemsForFacetQuery'; -export * from './TrendingQuery'; export * from './WithRecommendMethods'; From 0d304e6a8d97af8a62f93f11d3397af3164c3f6c Mon Sep 17 00:00:00 2001 From: Sophie Manley Date: Tue, 8 Mar 2022 14:17:50 +0100 Subject: [PATCH 5/6] fix: remove items for facet as in the search and use it within trending-item --- ...Items.test.ts => getTrendingItems.test.ts} | 4 +- .../getTrendingItemsForFacet.test.ts | 48 ------------------- packages/recommend/src/builds/browser.ts | 6 +-- packages/recommend/src/builds/node.ts | 6 +-- ...dingGlobalItems.ts => getTrendingItems.ts} | 12 ++--- .../src/methods/getTrendingItemsForFacet.ts | 22 --------- packages/recommend/src/methods/index.ts | 3 +- .../src/types/TrendingGlobalItemsQuery.ts | 6 --- .../src/types/TrendingItemsForFacetQuery.ts | 4 -- .../recommend/src/types/TrendingItemsQuery.ts | 3 ++ .../src/types/WithRecommendMethods.ts | 15 ++---- packages/recommend/src/types/index.ts | 3 +- 12 files changed, 20 insertions(+), 112 deletions(-) rename packages/recommend/src/__tests__/{getTrendingGlobalItems.test.ts => getTrendingItems.test.ts} (91%) delete mode 100644 packages/recommend/src/__tests__/getTrendingItemsForFacet.test.ts rename packages/recommend/src/methods/{getTrendingGlobalItems.ts => getTrendingItems.ts} (59%) delete mode 100644 packages/recommend/src/methods/getTrendingItemsForFacet.ts delete mode 100644 packages/recommend/src/types/TrendingGlobalItemsQuery.ts delete mode 100644 packages/recommend/src/types/TrendingItemsForFacetQuery.ts create mode 100644 packages/recommend/src/types/TrendingItemsQuery.ts diff --git a/packages/recommend/src/__tests__/getTrendingGlobalItems.test.ts b/packages/recommend/src/__tests__/getTrendingItems.test.ts similarity index 91% rename from packages/recommend/src/__tests__/getTrendingGlobalItems.test.ts rename to packages/recommend/src/__tests__/getTrendingItems.test.ts index 7dbdc0c45..03dfcd294 100644 --- a/packages/recommend/src/__tests__/getTrendingGlobalItems.test.ts +++ b/packages/recommend/src/__tests__/getTrendingItems.test.ts @@ -9,11 +9,11 @@ function createMockedClient() { return client; } -describe('getTrendingGlobalItems', () => { +describe('getTrendingItems', () => { test('builds the request', async () => { const client = createMockedClient(); - await client.getTrendingGlobalItems( + await client.getTrendingItems( [ { indexName: 'products', diff --git a/packages/recommend/src/__tests__/getTrendingItemsForFacet.test.ts b/packages/recommend/src/__tests__/getTrendingItemsForFacet.test.ts deleted file mode 100644 index 44e0e76b0..000000000 --- a/packages/recommend/src/__tests__/getTrendingItemsForFacet.test.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; - -const recommend = new TestSuite('recommend').recommend; - -function createMockedClient() { - const client = recommend('appId', 'apiKey'); - jest.spyOn(client.transporter, 'read').mockImplementation(() => Promise.resolve()); - - return client; -} - -describe('getTrendingItemsForFacet', () => { - test('builds the request', async () => { - const client = createMockedClient(); - - await client.getTrendingItemsForFacet( - [ - { - indexName: 'products', - facetName: 'company', - facetValue: 'tesla', - }, - ], - {} - ); - - expect(client.transporter.read).toHaveBeenCalledTimes(1); - expect(client.transporter.read).toHaveBeenCalledWith( - { - cacheable: true, - data: { - requests: [ - { - indexName: 'products', - model: 'trending-items', - facetName: 'company', - facetValue: 'tesla', - threshold: 0, - }, - ], - }, - method: 'POST', - path: '1/indexes/*/recommendations', - }, - {} - ); - }); -}); diff --git a/packages/recommend/src/builds/browser.ts b/packages/recommend/src/builds/browser.ts index 216389d2a..60db69674 100644 --- a/packages/recommend/src/builds/browser.ts +++ b/packages/recommend/src/builds/browser.ts @@ -13,8 +13,7 @@ import { getRecommendations, getRelatedProducts, getTrendingFacets, - getTrendingGlobalItems, - getTrendingItemsForFacet, + getTrendingItems, } from '../methods'; import { BaseRecommendClient, RecommendOptions, WithRecommendMethods } from '../types'; @@ -55,8 +54,7 @@ export default function recommend( getRecommendations, getRelatedProducts, getTrendingFacets, - getTrendingGlobalItems, - getTrendingItemsForFacet, + getTrendingItems, }, }); } diff --git a/packages/recommend/src/builds/node.ts b/packages/recommend/src/builds/node.ts index ae59a6c19..b7646c384 100644 --- a/packages/recommend/src/builds/node.ts +++ b/packages/recommend/src/builds/node.ts @@ -12,8 +12,7 @@ import { getRecommendations, getRelatedProducts, getTrendingFacets, - getTrendingGlobalItems, - getTrendingItemsForFacet, + getTrendingItems, } from '../methods'; import { BaseRecommendClient, RecommendOptions, WithRecommendMethods } from '../types'; @@ -49,8 +48,7 @@ export default function recommend( getRecommendations, getRelatedProducts, getTrendingFacets, - getTrendingGlobalItems, - getTrendingItemsForFacet, + getTrendingItems, }, }); } diff --git a/packages/recommend/src/methods/getTrendingGlobalItems.ts b/packages/recommend/src/methods/getTrendingItems.ts similarity index 59% rename from packages/recommend/src/methods/getTrendingGlobalItems.ts rename to packages/recommend/src/methods/getTrendingItems.ts index 9165744ae..fb1610dc2 100644 --- a/packages/recommend/src/methods/getTrendingGlobalItems.ts +++ b/packages/recommend/src/methods/getTrendingItems.ts @@ -1,14 +1,14 @@ import { MethodEnum } from '@algolia/requester-common'; -import { BaseRecommendClient, TrendingGlobalItemsQuery, WithRecommendMethods } from '../types'; +import { BaseRecommendClient, TrendingItemsQuery, WithRecommendMethods } from '../types'; -type GetTrendingGlobalItems = ( +type GetTrendingItems = ( base: BaseRecommendClient -) => WithRecommendMethods['getTrendingGlobalItems']; +) => WithRecommendMethods['getTrendingItems']; -export const getTrendingGlobalItems: GetTrendingGlobalItems = base => { - return (queries: readonly TrendingGlobalItemsQuery[], requestOptions) => { - const requests: readonly TrendingGlobalItemsQuery[] = queries.map(query => ({ +export const getTrendingItems: GetTrendingItems = base => { + return (queries: readonly TrendingItemsQuery[], requestOptions) => { + const requests: readonly TrendingItemsQuery[] = queries.map(query => ({ ...query, model: 'trending-items', // The `threshold` param is required by the endpoint to make it easier diff --git a/packages/recommend/src/methods/getTrendingItemsForFacet.ts b/packages/recommend/src/methods/getTrendingItemsForFacet.ts deleted file mode 100644 index 055d52f45..000000000 --- a/packages/recommend/src/methods/getTrendingItemsForFacet.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { BaseRecommendClient, TrendingItemsForFacetQuery, WithRecommendMethods } from '../types'; -import { getTrendingGlobalItems } from '.'; - -type GetTrendingItemsForFacet = ( - base: BaseRecommendClient -) => WithRecommendMethods['getTrendingItemsForFacet']; - -export const getTrendingItemsForFacet: GetTrendingItemsForFacet = base => { - return (queries: readonly TrendingItemsForFacetQuery[], requestOptions) => { - return getTrendingGlobalItems(base)( - queries.map(query => ({ - ...query, - model: 'trending-items', - // 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 - // so that users don't have to provide a value. - threshold: query.threshold || 0, - })), - requestOptions - ); - }; -}; diff --git a/packages/recommend/src/methods/index.ts b/packages/recommend/src/methods/index.ts index f320c3fa5..e30466cc0 100644 --- a/packages/recommend/src/methods/index.ts +++ b/packages/recommend/src/methods/index.ts @@ -6,5 +6,4 @@ export * from './getFrequentlyBoughtTogether'; export * from './getRecommendations'; export * from './getRelatedProducts'; export * from './getTrendingFacets'; -export * from './getTrendingGlobalItems'; -export * from './getTrendingItemsForFacet'; +export * from './getTrendingItems'; diff --git a/packages/recommend/src/types/TrendingGlobalItemsQuery.ts b/packages/recommend/src/types/TrendingGlobalItemsQuery.ts deleted file mode 100644 index 1a410067c..000000000 --- a/packages/recommend/src/types/TrendingGlobalItemsQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { RecommendationsQuery } from './RecommendationsQuery'; - -export type TrendingGlobalItemsQuery = Omit< - RecommendationsQuery, - 'model' | 'objectID' | 'facetName' | 'facetValue' ->; diff --git a/packages/recommend/src/types/TrendingItemsForFacetQuery.ts b/packages/recommend/src/types/TrendingItemsForFacetQuery.ts deleted file mode 100644 index 4afd3fd51..000000000 --- a/packages/recommend/src/types/TrendingItemsForFacetQuery.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { RecommendationsQuery } from './RecommendationsQuery'; - -export type TrendingItemsForFacetQuery = Omit & - Required>; diff --git a/packages/recommend/src/types/TrendingItemsQuery.ts b/packages/recommend/src/types/TrendingItemsQuery.ts new file mode 100644 index 000000000..65bf26e60 --- /dev/null +++ b/packages/recommend/src/types/TrendingItemsQuery.ts @@ -0,0 +1,3 @@ +import { RecommendationsQuery } from './RecommendationsQuery'; + +export type TrendingItemsQuery = Omit; diff --git a/packages/recommend/src/types/WithRecommendMethods.ts b/packages/recommend/src/types/WithRecommendMethods.ts index 0c9bcf146..25320a195 100644 --- a/packages/recommend/src/types/WithRecommendMethods.ts +++ b/packages/recommend/src/types/WithRecommendMethods.ts @@ -5,8 +5,7 @@ import { FrequentlyBoughtTogetherQuery } from './FrequentlyBoughtTogetherQuery'; import { RecommendationsQuery } from './RecommendationsQuery'; import { RelatedProductsQuery } from './RelatedProductsQuery'; import { TrendingFacetsQuery } from './TrendingFacetsQuery'; -import { TrendingGlobalItemsQuery } from './TrendingGlobalItemsQuery'; -import { TrendingItemsForFacetQuery } from './TrendingItemsForFacetQuery'; +import { TrendingItemsQuery } from './TrendingItemsQuery'; export type WithRecommendMethods = TType & { /** @@ -36,16 +35,8 @@ export type WithRecommendMethods = TType & { /** * Returns trending items */ - readonly getTrendingGlobalItems: ( - queries: readonly TrendingGlobalItemsQuery[], - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; - - /** - * Returns trending items per facet - */ - readonly getTrendingItemsForFacet: ( - queries: readonly TrendingItemsForFacetQuery[], + readonly getTrendingItems: ( + queries: readonly TrendingItemsQuery[], requestOptions?: RequestOptions & SearchOptions ) => Readonly>>; diff --git a/packages/recommend/src/types/index.ts b/packages/recommend/src/types/index.ts index 8a93be8e7..c5a779f30 100644 --- a/packages/recommend/src/types/index.ts +++ b/packages/recommend/src/types/index.ts @@ -11,6 +11,5 @@ export * from './RecommendSearchOptions'; export * from './RecommendationsQuery'; export * from './RelatedProductsQuery'; export * from './TrendingFacetsQuery'; -export * from './TrendingGlobalItemsQuery'; -export * from './TrendingItemsForFacetQuery'; +export * from './TrendingItemsQuery'; export * from './WithRecommendMethods'; From a1d7636bcec15b88876906103e066a5788ffc631 Mon Sep 17 00:00:00 2001 From: Sophie Manley Date: Fri, 11 Mar 2022 10:15:15 +0100 Subject: [PATCH 6/6] fix: reintroduce trendingQuery --- .../src/methods/getRecommendations.ts | 11 +++-- .../types/FrequentlyBoughtTogetherQuery.ts | 5 +- .../src/types/RecommendationsQuery.ts | 12 +---- .../src/types/RelatedProductsQuery.ts | 6 +-- .../src/types/TrendingFacetsQuery.ts | 5 +- .../recommend/src/types/TrendingItemsQuery.ts | 4 +- packages/recommend/src/types/TrendingQuery.ts | 46 +++++++++++++++++++ packages/recommend/src/types/index.ts | 1 + 8 files changed, 63 insertions(+), 27 deletions(-) create mode 100644 packages/recommend/src/types/TrendingQuery.ts diff --git a/packages/recommend/src/methods/getRecommendations.ts b/packages/recommend/src/methods/getRecommendations.ts index 5690ddaa5..8fda3aa2a 100644 --- a/packages/recommend/src/methods/getRecommendations.ts +++ b/packages/recommend/src/methods/getRecommendations.ts @@ -1,14 +1,19 @@ import { MethodEnum } from '@algolia/requester-common'; -import { BaseRecommendClient, RecommendationsQuery, WithRecommendMethods } from '../types'; +import { + BaseRecommendClient, + RecommendationsQuery, + TrendingQuery, + WithRecommendMethods, +} from '../types'; type GetRecommendations = ( base: BaseRecommendClient ) => WithRecommendMethods['getRecommendations']; export const getRecommendations: GetRecommendations = base => { - return (queries: readonly RecommendationsQuery[], requestOptions) => { - const requests: readonly RecommendationsQuery[] = queries.map(query => ({ + return (queries: ReadonlyArray, requestOptions) => { + const requests: ReadonlyArray = 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/FrequentlyBoughtTogetherQuery.ts b/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts index 7a2a4cf74..829abd2a8 100644 --- a/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts +++ b/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts @@ -2,6 +2,5 @@ import { RecommendationsQuery } from './RecommendationsQuery'; export type FrequentlyBoughtTogetherQuery = Omit< RecommendationsQuery, - 'model' | 'fallbackParameters' | 'facetName' | 'facetValue' -> & - Required>; + 'model' | 'fallbackParameters' +>; diff --git a/packages/recommend/src/types/RecommendationsQuery.ts b/packages/recommend/src/types/RecommendationsQuery.ts index 2c7625a82..4d269f869 100644 --- a/packages/recommend/src/types/RecommendationsQuery.ts +++ b/packages/recommend/src/types/RecommendationsQuery.ts @@ -15,7 +15,7 @@ export type RecommendationsQuery = { /** * The `objectID` of the item to get recommendations for. */ - readonly objectID?: string; + readonly objectID: string; /** * Threshold for the recommendations confidence score (between 0 and 100). Only recommendations with a greater score are returned. @@ -38,14 +38,4 @@ export type RecommendationsQuery = { * Additional filters to use as fallback when there aren’t enough recommendations. */ readonly fallbackParameters?: RecommendSearchOptions; - - /** - * Used for trending model - */ - readonly facetName?: string; - - /** - * Used for trending model - */ - readonly facetValue?: string; }; diff --git a/packages/recommend/src/types/RelatedProductsQuery.ts b/packages/recommend/src/types/RelatedProductsQuery.ts index c207d7533..d4fa107a5 100644 --- a/packages/recommend/src/types/RelatedProductsQuery.ts +++ b/packages/recommend/src/types/RelatedProductsQuery.ts @@ -1,7 +1,3 @@ import { RecommendationsQuery } from './RecommendationsQuery'; -export type RelatedProductsQuery = Omit< - RecommendationsQuery, - 'model' | 'facetName' | 'facetValue' -> & - Required>; +export type RelatedProductsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingFacetsQuery.ts b/packages/recommend/src/types/TrendingFacetsQuery.ts index 7ea6f3201..e3f219ab4 100644 --- a/packages/recommend/src/types/TrendingFacetsQuery.ts +++ b/packages/recommend/src/types/TrendingFacetsQuery.ts @@ -1,4 +1,3 @@ -import { RecommendationsQuery } from './RecommendationsQuery'; +import { TrendingQuery } from './TrendingQuery'; -export type TrendingFacetsQuery = Omit & - Required>; +export type TrendingFacetsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingItemsQuery.ts b/packages/recommend/src/types/TrendingItemsQuery.ts index 65bf26e60..d6f8a665d 100644 --- a/packages/recommend/src/types/TrendingItemsQuery.ts +++ b/packages/recommend/src/types/TrendingItemsQuery.ts @@ -1,3 +1,3 @@ -import { RecommendationsQuery } from './RecommendationsQuery'; +import { TrendingQuery } from './TrendingQuery'; -export type TrendingItemsQuery = Omit; +export type TrendingItemsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingQuery.ts b/packages/recommend/src/types/TrendingQuery.ts new file mode 100644 index 000000000..bce65655e --- /dev/null +++ b/packages/recommend/src/types/TrendingQuery.ts @@ -0,0 +1,46 @@ +import { TrendingModel } from './RecommendModel'; +import { RecommendSearchOptions } from './RecommendSearchOptions'; + +export type TrendingQuery = { + /** + * The name of the target index. + */ + readonly indexName: string; + + /** + * The name of the Recommendation model to use. + */ + readonly model: TrendingModel; + + /** + * Threshold for the recommendations confidence score (between 0 and 100). Only recommendations with a greater score are returned. + */ + readonly threshold?: number; + + /** + * How many recommendations to retrieve. + */ + readonly maxRecommendations?: number; + + /** + * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. + */ + readonly queryParameters?: RecommendSearchOptions; + + /** + * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. + * + * Additional filters to use as fallback when there aren’t enough recommendations. + */ + readonly fallbackParameters?: RecommendSearchOptions; + + /** + * Used for trending model + */ + readonly facetName?: string; + + /** + * Used for trending model + */ + readonly facetValue?: string; +}; diff --git a/packages/recommend/src/types/index.ts b/packages/recommend/src/types/index.ts index c5a779f30..19b2cd086 100644 --- a/packages/recommend/src/types/index.ts +++ b/packages/recommend/src/types/index.ts @@ -11,5 +11,6 @@ export * from './RecommendSearchOptions'; export * from './RecommendationsQuery'; export * from './RelatedProductsQuery'; export * from './TrendingFacetsQuery'; +export * from './TrendingQuery'; export * from './TrendingItemsQuery'; export * from './WithRecommendMethods';