more adjustments

move indexing logic to plugin
remove loadToSearchEngine from ProductService
adjust medusa core accordingly
This commit is contained in:
zakariaelas
2021-09-21 13:14:08 +01:00
parent 3a10e37377
commit c67ca16a9b
7 changed files with 161 additions and 151 deletions
@@ -1,89 +0,0 @@
import ProductService from "../services/product"
import ProductVariantService from "../services/product-variant"
import { flattenField } from "../utils/flatten-field"
class ProductSearchSubscriber {
constructor({ eventBusService, searchService, productService }, options) {
this.eventBus_ = eventBusService
this.searchService_ = searchService
this.productService_ = productService
this.eventBus_.subscribe(
ProductService.Events.CREATED,
this.handleProductCreation
)
this.eventBus_.subscribe(
ProductService.Events.UPDATED,
this.handleProductUpdate
)
this.eventBus_.subscribe(
ProductService.Events.DELETED,
this.handleProductDeletion
)
this.eventBus_.subscribe(
ProductVariantService.Events.CREATED,
this.handleProductVariantChange
)
this.eventBus_.subscribe(
ProductVariantService.Events.UPDATED,
this.handleProductVariantChange
)
this.eventBus_.subscribe(
ProductVariantService.Events.DELETED,
this.handleProductVariantChange
)
}
handleProductCreation = async data => {
const product = await this.retrieveProduct_(data.id)
await this.searchService_.addDocuments(ProductService.IndexName, [product])
}
retrieveProduct_ = async product_id => {
const product = await this.productService_.retrieve(product_id, {
select: [
"id",
"title",
"subtitle",
"description",
"handle",
"is_giftcard",
"discountable",
"thumbnail",
"profile_id",
"collection_id",
"type_id",
"origin_country",
"created_at",
"updated_at",
],
relations: ["variants", "tags", "type", "collection"],
})
const skus = flattenField(product.variants, "sku").filter(Boolean)
product.sku = skus
return product
}
handleProductUpdate = async data => {
const product = await this.retrieveProduct_(data.id)
await this.searchService_.addDocuments(ProductService.IndexName, [product])
}
handleProductDeletion = async data => {
await this.searchService_.deleteDocument(ProductService.IndexName, data.id)
}
handleProductVariantChange = async data => {
const product = await this.retrieveProduct_(data.product_id)
await this.searchService_.addDocuments(ProductService.IndexName, [product])
}
}
export default ProductSearchSubscriber