fix(product, types, workflows): Update product variant workflow (#5668)

**What**
- Fix issues with update-variant workflow: 
  - other variants than the updated variant are no longer removed 
  - options are updated properly


Co-authored-by: Riqwan Thamir <5105988+riqwan@users.noreply.github.com>
This commit is contained in:
Philip Korsholm
2023-11-23 14:35:01 +00:00
committed by GitHub
co-authored by Riqwan Thamir
parent b25b29fe7b
commit a39ce125cc
16 changed files with 617 additions and 44 deletions
@@ -1,5 +1,5 @@
import { Modules, ModulesDefinition } from "@medusajs/modules-sdk"
import { ProductTypes } from "@medusajs/types"
import { ProductTypes, UpdateProductVariantOnlyDTO } from "@medusajs/types"
import { WorkflowArguments } from "../../helper"
type HandlerInput = {
@@ -14,21 +14,22 @@ export async function updateProductVariants({
> {
const { productVariantsMap } = data
const productsVariants: ProductTypes.UpdateProductVariantDTO[] = []
const updateProductsData: ProductTypes.UpdateProductDTO[] = []
const updateVariantsData: ProductTypes.UpdateProductVariantOnlyDTO[] = []
const productModuleService: ProductTypes.IProductModuleService =
container.resolve(ModulesDefinition[Modules.PRODUCT].registrationName)
for (const [productId, variantsData = []] of productVariantsMap) {
updateProductsData.push({
id: productId,
variants: variantsData,
})
for (const [product_id, variantsUpdateData = []] of productVariantsMap) {
updateVariantsData.push(
...(variantsUpdateData as unknown as UpdateProductVariantOnlyDTO[]).map(
(update) => ({ ...update, product_id })
)
)
productsVariants.push(...variantsData)
productsVariants.push(...variantsUpdateData)
}
if (updateProductsData.length) {
await productModuleService.update(updateProductsData)
if (updateVariantsData.length) {
await productModuleService.updateVariants(updateVariantsData)
}
return productsVariants