@medusajs/core-flows
Version:
Set of workflow definitions for Medusa
82 lines • 3.03 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.updatePriceListPricesStep = exports.updatePriceListPricesStepId = void 0;
const utils_1 = require("@medusajs/framework/utils");
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
exports.updatePriceListPricesStepId = "update-price-list-prices";
/**
* This step updates a price list's prices.
*
* @example
* const data = updatePriceListPricesStep({
* data: [{
* id: "plist_123",
* prices: [
* {
* id: "price_123",
* currency_code: "USD",
* amount: 1000,
* variant_id: "variant_123",
* }
* ]
* }],
* variant_price_map: {
* "variant_123": "pset_123"
* }
* })
*/
exports.updatePriceListPricesStep = (0, workflows_sdk_1.createStep)(exports.updatePriceListPricesStepId, async (stepInput, { container }) => {
const { data = [], variant_price_map: variantPriceSetMap } = stepInput;
const priceListPricesToUpdate = [];
const priceIds = [];
const pricingModule = container.resolve(utils_1.Modules.PRICING);
for (const priceListData of data) {
const pricesToUpdate = [];
const { prices = [], id } = priceListData;
for (const price of prices) {
const toPush = {
...price,
price_set_id: variantPriceSetMap[price.variant_id],
};
delete toPush.variant_id;
pricesToUpdate.push(toPush);
if (price.id) {
priceIds.push(price.id);
}
}
priceListPricesToUpdate.push({
price_list_id: id,
prices: pricesToUpdate,
});
}
if (!priceListPricesToUpdate.length) {
return new workflows_sdk_1.StepResponse([]);
}
const existingPrices = priceIds.length
? await pricingModule.listPrices({ id: priceIds }, { relations: ["price_list"] })
: [];
const priceListPricesMap = new Map();
const dataBeforePriceUpdate = [];
for (const price of existingPrices) {
const priceListId = price.price_list.id;
const prices = priceListPricesMap.get(priceListId) || [];
priceListPricesMap.set(priceListId, prices);
}
for (const [priceListId, prices] of Object.entries(priceListPricesMap)) {
dataBeforePriceUpdate.push({
price_list_id: priceListId,
prices: (0, utils_1.buildPriceSetPricesForModule)(prices),
});
}
const updatedPrices = await pricingModule.updatePriceListPrices(priceListPricesToUpdate);
return new workflows_sdk_1.StepResponse(updatedPrices, dataBeforePriceUpdate);
}, async (dataBeforePriceUpdate, { container }) => {
if (!dataBeforePriceUpdate?.length) {
return;
}
const pricingModule = container.resolve(utils_1.Modules.PRICING);
if (dataBeforePriceUpdate.length) {
await pricingModule.updatePriceListPrices(dataBeforePriceUpdate);
}
});
//# sourceMappingURL=update-price-list-prices.js.map
;