feat(product, pricing, utils): Transaction issues and reference issues (#5533)
* feat(product, pricing, utils): Transaction issues and reference issues * fixes decorators * cleanup * fix product module upsert * fix missing active manager * increase timeout * revert package.json * WIP * try another node version based on findings with memory issues with jest introduced after 16.11 but fixed in 21 * re add bail * fix variant options * chore: bulk create pricing * chore: workflow bulk * Create big-chefs-dream.md * fix missing update for upserty * Add integration tests for product options upsert * rm unnecessary return * fix product prices workflow issue * cleanup * fix flag * fix model --------- Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Co-authored-by: Carlos R. L. Rodrigues <rodrigolr@gmail.com> Co-authored-by: Riqwan Thamir <rmthamir@gmail.com>
This commit is contained in:
committed by
GitHub
parent
57c3a24ad3
commit
f88d75b0a7
@@ -2,6 +2,7 @@ import { ProductTypes, WorkflowTypes } from "@medusajs/types"
|
||||
|
||||
import { MedusaError } from "@medusajs/utils"
|
||||
import { WorkflowArguments } from "../../helper"
|
||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
|
||||
type ProductHandle = string
|
||||
type VariantIndexAndPrices = {
|
||||
@@ -37,6 +38,8 @@ export async function updateProductsVariantsPrices({
|
||||
products.map((p) => [p.handle!, p])
|
||||
)
|
||||
|
||||
const regionIds = new Set()
|
||||
|
||||
for (const mapData of productsHandleVariantsIndexPricesMap.entries()) {
|
||||
const [handle, variantData] = mapData
|
||||
|
||||
@@ -55,9 +58,10 @@ export async function updateProductsVariantsPrices({
|
||||
prices: item.prices,
|
||||
})
|
||||
|
||||
variantPricesMap.set(variant.id, [])
|
||||
const prices: any[] = []
|
||||
variantPricesMap.set(variant.id, prices)
|
||||
|
||||
item.prices.forEach(async (price) => {
|
||||
item.prices.forEach((price) => {
|
||||
const obj = {
|
||||
amount: price.amount,
|
||||
currency_code: price.currency_code,
|
||||
@@ -65,38 +69,59 @@ export async function updateProductsVariantsPrices({
|
||||
}
|
||||
|
||||
if (price.region_id) {
|
||||
const region = await regionService.retrieve(price.region_id)
|
||||
obj.currency_code = region.currency_code
|
||||
obj.rules = {
|
||||
region_id: price.region_id,
|
||||
}
|
||||
regionIds.add(price.region_id)
|
||||
;(obj as any).region_id = price.region_id
|
||||
}
|
||||
|
||||
const variantPrices = variantPricesMap.get(variant.id)
|
||||
variantPrices?.push(obj)
|
||||
prices.push(obj)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if (featureFlagRouter.isFeatureEnabled("isolate_pricing_domain")) {
|
||||
const remoteLink = container.resolve("remoteLink")
|
||||
const pricingModuleService = container.resolve("pricingModuleService")
|
||||
if (regionIds.size) {
|
||||
const regions = await regionService.list({
|
||||
id: [...regionIds],
|
||||
})
|
||||
const regionMap = new Map<string, any>(regions.map((r) => [r.id, r]))
|
||||
|
||||
for (let { variantId } of variantIdsPricesData) {
|
||||
const priceSet = await pricingModuleService.create({
|
||||
rules: [{ rule_attribute: "region_id" }],
|
||||
prices: variantPricesMap.get(variantId),
|
||||
})
|
||||
for (const [, prices] of variantPricesMap.entries()) {
|
||||
prices.forEach((price) => {
|
||||
if (price.region_id) {
|
||||
const region = regionMap.get(price.region_id)
|
||||
price.currency_code = region?.currency_code
|
||||
price.rules = {
|
||||
region_id: price.region_id,
|
||||
}
|
||||
|
||||
await remoteLink.create({
|
||||
productService: {
|
||||
variant_id: variantId,
|
||||
},
|
||||
pricingService: {
|
||||
price_set_id: priceSet.id,
|
||||
},
|
||||
delete price.region_id
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (featureFlagRouter.isFeatureEnabled("isolate_pricing_domain")) {
|
||||
const remoteLink = container.resolve("remoteLink")
|
||||
const pricingModuleService = container.resolve(
|
||||
ModuleRegistrationName.PRICING
|
||||
)
|
||||
|
||||
const priceSetsToCreate = variantIdsPricesData.map(({ variantId }) => ({
|
||||
rules: [{ rule_attribute: "region_id" }],
|
||||
prices: variantPricesMap.get(variantId),
|
||||
}))
|
||||
|
||||
const priceSets = await pricingModuleService.create(priceSetsToCreate)
|
||||
|
||||
const links = priceSets.map((priceSet, index) => ({
|
||||
productService: {
|
||||
variant_id: variantIdsPricesData[index].variantId,
|
||||
},
|
||||
pricingService: {
|
||||
price_set_id: priceSet.id,
|
||||
},
|
||||
}))
|
||||
|
||||
await remoteLink.create(links)
|
||||
} else {
|
||||
await productVariantServiceTx.updateVariantPrices(variantIdsPricesData)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user