From 9b6d0c733474872cb8f96cd7ac611c40da2069c3 Mon Sep 17 00:00:00 2001 From: zakariaelas Date: Mon, 27 Sep 2021 12:42:10 +0100 Subject: [PATCH] add: request + response interface changes --- packages/medusa-interfaces/src/search-service.js | 7 ++++--- .../src/services/meilisearch.js | 5 ++++- .../src/api/routes/store/products/search.js | 16 ++++++++++------ packages/medusa/src/services/search.js | 2 +- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/packages/medusa-interfaces/src/search-service.js b/packages/medusa-interfaces/src/search-service.js index 7ea04fd945..7b30fe846a 100644 --- a/packages/medusa-interfaces/src/search-service.js +++ b/packages/medusa-interfaces/src/search-service.js @@ -73,9 +73,10 @@ class SearchService extends BaseService { * Used to search for a document in an index * @param indexName {string} - the index name * @param query {string} - the search query - * @param options {object} - any options passed to the request object other than the query and indexName - * e.g. pagination options, filtering options, etc - * @return {Promise<{object}>} - returns response from search engine provider + * @param options {{ paginationOptions: { limit: number, offset: number }, filter: string, additionalOptions: any}} + * - any options passed to the request object other than the query and indexName + * - additionalOptions contain any provider specific options + * @return {Promise<{ hits: any[]; [k: string]: any; }>} returns response from search engine provider */ search(indexName, query, options) { throw Error("search must be overridden by a child class") diff --git a/packages/medusa-plugin-meilisearch/src/services/meilisearch.js b/packages/medusa-plugin-meilisearch/src/services/meilisearch.js index 4025f512f4..7def3c2c40 100644 --- a/packages/medusa-plugin-meilisearch/src/services/meilisearch.js +++ b/packages/medusa-plugin-meilisearch/src/services/meilisearch.js @@ -39,7 +39,10 @@ class MeiliSearchService extends SearchService { } search(indexName, query, options) { - return this.client_.index(indexName).search(query, options) + const { paginationOptions, filter, additionalOptions } = options + return this.client_ + .index(indexName) + .search(query, { filter, ...paginationOptions, ...additionalOptions }) } updateSettings(indexName, settings) { diff --git a/packages/medusa/src/api/routes/store/products/search.js b/packages/medusa/src/api/routes/store/products/search.js index a24c63f11d..f589ba75fe 100644 --- a/packages/medusa/src/api/routes/store/products/search.js +++ b/packages/medusa/src/api/routes/store/products/search.js @@ -5,6 +5,9 @@ export default async (req, res) => { const schema = Validator.object() .keys({ q: Validator.string().required(), + offset: Validator.number().optional(), + limit: Validator.number().optional(), + filter: Validator.any(), }) .options({ allowUnknown: true }) @@ -14,15 +17,16 @@ export default async (req, res) => { } try { - const { q, ...options } = value + const { q, offset, limit, filter, ...options } = value + const paginationOptions = { offset, limit } const searchService = req.scope.resolve("searchService") - const results = await searchService.search( - ProductService.IndexName, - q, - options - ) + const results = await searchService.search(ProductService.IndexName, q, { + paginationOptions, + filter, + additionalOptions: options, + }) res.status(200).send(results) } catch (error) { diff --git a/packages/medusa/src/services/search.js b/packages/medusa/src/services/search.js index 5695ceb68a..f0893e313b 100644 --- a/packages/medusa/src/services/search.js +++ b/packages/medusa/src/services/search.js @@ -53,7 +53,7 @@ class DefaultSearchService extends SearchService { this.logger_.warn( "This is an empty method: search must be overridden a the child class" ) - return [] + return { hits: [] } } updateSettings(indexName, settings) {