From 307b1c93427b956cb806f0c30e956d229e425394 Mon Sep 17 00:00:00 2001 From: zakariaelas Date: Fri, 24 Sep 2021 01:18:31 +0100 Subject: [PATCH] fix cursor pagination + flatten variant options field --- packages/medusa-core-utils/src/index-types.js | 3 +++ .../src/subscribers/product-search.js | 10 ++++++- .../src/utils/transform-product.js | 26 +++++++++++++++---- packages/medusa/src/loaders/search-index.js | 12 +++++++-- 4 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 packages/medusa-core-utils/src/index-types.js diff --git a/packages/medusa-core-utils/src/index-types.js b/packages/medusa-core-utils/src/index-types.js new file mode 100644 index 0000000000..b27010788c --- /dev/null +++ b/packages/medusa-core-utils/src/index-types.js @@ -0,0 +1,3 @@ +export const indexTypes = { + products: "products", +} diff --git a/packages/medusa-plugin-meilisearch/src/subscribers/product-search.js b/packages/medusa-plugin-meilisearch/src/subscribers/product-search.js index 49e452302d..e60f846697 100644 --- a/packages/medusa-plugin-meilisearch/src/subscribers/product-search.js +++ b/packages/medusa-plugin-meilisearch/src/subscribers/product-search.js @@ -60,7 +60,15 @@ class ProductSearchSubscriber { "created_at", "updated_at", ], - relations: ["variants", "tags", "type", "collection"], + relations: [ + "variants", + "tags", + "type", + "collection", + "variants.prices", + "variants.options", + "options", + ], }) const transformedProduct = transformProduct(product) return transformedProduct diff --git a/packages/medusa-plugin-meilisearch/src/utils/transform-product.js b/packages/medusa-plugin-meilisearch/src/utils/transform-product.js index 137f6bd483..59f931fe55 100644 --- a/packages/medusa-plugin-meilisearch/src/utils/transform-product.js +++ b/packages/medusa-plugin-meilisearch/src/utils/transform-product.js @@ -1,4 +1,12 @@ -const variantKeys = ["sku", "title", "upc", "ean", "mid_code", "hs_code"] +const variantKeys = [ + "sku", + "title", + "upc", + "ean", + "mid_code", + "hs_code", + "options", +] const prefix = `variant` export const transformProduct = (product) => { @@ -6,17 +14,25 @@ export const transformProduct = (product) => { obj[`${prefix}_${key}`] = [] return obj }, {}) + initialObj[`${prefix}_options_value`] = [] const flattenedVariantFields = product.variants.reduce((obj, variant) => { - variantKeys.forEach( - (k) => variant[k] && obj[`${prefix}_${k}`].push(variant[k]) - ) + variantKeys.forEach((k) => { + if (k === "options" && variant[k]) { + const values = variant[k].map((option) => option.value) + obj[`${prefix}_options_value`] = obj[`${prefix}_options_value`].concat( + values + ) + return + } + return variant[k] && obj[`${prefix}_${k}`].push(variant[k]) + }) return obj }, initialObj) product.type_value = product.type && product.type.value product.collection_title = product.collection && product.collection.title - product.tags_value = product.tags.map((t) => t.value) + product.tags_value = product.tags ? product.tags.map((t) => t.value) : [] return { ...product, diff --git a/packages/medusa/src/loaders/search-index.js b/packages/medusa/src/loaders/search-index.js index 220e853931..ad10cb5c98 100644 --- a/packages/medusa/src/loaders/search-index.js +++ b/packages/medusa/src/loaders/search-index.js @@ -7,7 +7,7 @@ async function loadProductsIntoSearchEngine(container) { const TAKE = 20 const totalCount = await productService.count() let iterCount = 0, - lastSeenId = "prod" + lastSeenId = "" while (iterCount < totalCount) { const products = await productService.list( @@ -29,7 +29,15 @@ async function loadProductsIntoSearchEngine(container) { "created_at", "updated_at", ], - relations: ["variants", "tags", "type", "collection"], + relations: [ + "variants", + "tags", + "type", + "collection", + "variants.prices", + "variants.options", + "options", + ], take: TAKE, order: { id: "ASC" }, }