fix(pricing): events (#11742)

This commit is contained in:
Carlos R. L. Rodrigues
2025-03-05 15:35:23 -03:00
committed by GitHub
parent cc1309d370
commit 16d7294de8
4 changed files with 159 additions and 71 deletions

View File

@@ -40,6 +40,7 @@ import {
promiseAll,
removeNullish,
simpleHash,
upperCaseFirst,
} from "@medusajs/framework/utils"
import {
@@ -472,6 +473,7 @@ export default class PricingModuleService
): Promise<PriceSetDTO>
@InjectManager()
@EmitEvents()
async upsertPriceSets(
data: UpsertPriceSetDTO | UpsertPriceSetDTO[],
@MedusaContext() sharedContext: Context = {}
@@ -513,6 +515,7 @@ export default class PricingModuleService
): Promise<PriceSetDTO[]>
@InjectManager()
@EmitEvents()
// @ts-expect-error
async updatePriceSets(
idOrSelector: string | PricingTypes.FilterablePriceSetProps,
@@ -563,13 +566,19 @@ export default class PricingModuleService
})
const prices = normalizedData.flatMap((priceSet) => priceSet.prices || [])
const { entities: upsertedPrices } =
const { entities: upsertedPrices, performedActions } =
await this.priceService_.upsertWithReplace(
prices,
{ relations: ["price_rules"] },
sharedContext
)
composeAllEvents({
eventBuilders,
performedActions,
sharedContext,
})
const priceSetsToUpsert = normalizedData.map((priceSet) => {
const { prices, ...rest } = priceSet
return {
@@ -594,13 +603,19 @@ export default class PricingModuleService
}
})
const { entities: priceSets } =
const { entities: priceSets, performedActions: priceSetPerformedActions } =
await this.priceSetService_.upsertWithReplace(
priceSetsToUpsert,
{ relations: ["prices"] },
sharedContext
)
composeAllEvents({
eventBuilders,
performedActions: priceSetPerformedActions,
sharedContext,
})
return priceSets.map((ps) => {
if (ps.prices) {
ps.prices = (ps.prices as any).filter((p) => !p.price_list_id)
@@ -747,6 +762,7 @@ export default class PricingModuleService
}
@InjectTransactionManager()
@EmitEvents()
// @ts-ignore
async updatePriceLists(
data: PricingTypes.UpdatePriceListDTO[],
@@ -760,6 +776,7 @@ export default class PricingModuleService
}
@InjectManager()
@EmitEvents()
async updatePriceListPrices(
data: PricingTypes.UpdatePriceListPricesDTO[],
@MedusaContext() sharedContext: Context = {}
@@ -770,6 +787,7 @@ export default class PricingModuleService
}
@InjectManager()
@EmitEvents()
async removePrices(
ids: string[],
@MedusaContext() sharedContext: Context = {}
@@ -789,6 +807,7 @@ export default class PricingModuleService
}
@InjectManager()
@EmitEvents()
async setPriceListRules(
data: PricingTypes.SetPriceListRulesDTO,
@MedusaContext() sharedContext: Context = {}
@@ -801,6 +820,7 @@ export default class PricingModuleService
}
@InjectManager()
@EmitEvents()
async removePriceListRules(
data: PricingTypes.RemovePriceListRulesDTO,
@MedusaContext() sharedContext: Context = {}
@@ -852,6 +872,7 @@ export default class PricingModuleService
): Promise<PricePreferenceDTO>
@InjectManager()
@EmitEvents()
async upsertPricePreferences(
data: UpsertPricePreferenceDTO | UpsertPricePreferenceDTO[],
@MedusaContext() sharedContext: Context = {}
@@ -1081,29 +1102,10 @@ export default class PricingModuleService
{ relations: ["price_rules"] },
sharedContext
)
eventBuilders.createdPrice({
data: performedActions.created[Price.name] ?? [],
sharedContext,
})
eventBuilders.updatedPrice({
data: performedActions.updated[Price.name] ?? [],
sharedContext,
})
eventBuilders.deletedPrice({
data: performedActions.deleted[Price.name] ?? [],
sharedContext,
})
eventBuilders.createdPriceRule({
data: performedActions.created[PriceRule.name] ?? [],
sharedContext,
})
eventBuilders.updatedPriceRule({
data: performedActions.updated[PriceRule.name] ?? [],
sharedContext,
})
eventBuilders.deletedPriceRule({
data: performedActions.deleted[PriceRule.name] ?? [],
composeAllEvents({
eventBuilders,
performedActions,
sharedContext,
})
@@ -1277,12 +1279,16 @@ export default class PricingModuleService
}
)
const { entities } = await this.priceListService_.upsertWithReplace(
normalizedData,
{
const { entities, performedActions } =
await this.priceListService_.upsertWithReplace(normalizedData, {
relations: ["price_list_rules"],
}
)
})
composeAllEvents({
eventBuilders,
performedActions,
sharedContext,
})
return entities
}
@@ -1326,11 +1332,18 @@ export default class PricingModuleService
}
}
const { entities } = await this.priceService_.upsertWithReplace(
pricesToUpsert,
{ relations: ["price_rules"] },
sharedContext
)
const { entities, performedActions } =
await this.priceService_.upsertWithReplace(
pricesToUpsert,
{ relations: ["price_rules"] },
sharedContext
)
composeAllEvents({
eventBuilders,
performedActions,
sharedContext,
})
return entities
}
@@ -1388,29 +1401,9 @@ export default class PricingModuleService
sharedContext
)
eventBuilders.createdPrice({
data: performedActions.created[Price.name] ?? [],
sharedContext,
})
eventBuilders.updatedPrice({
data: performedActions.updated[Price.name] ?? [],
sharedContext,
})
eventBuilders.deletedPrice({
data: performedActions.deleted[Price.name] ?? [],
sharedContext,
})
eventBuilders.createdPriceRule({
data: performedActions.created[PriceRule.name] ?? [],
sharedContext,
})
eventBuilders.updatedPriceRule({
data: performedActions.updated[PriceRule.name] ?? [],
sharedContext,
})
eventBuilders.deletedPriceRule({
data: performedActions.deleted[PriceRule.name] ?? [],
composeAllEvents({
eventBuilders,
performedActions,
sharedContext,
})
@@ -1472,11 +1465,18 @@ export default class PricingModuleService
})
.filter(Boolean)
const { entities } = await this.priceListService_.upsertWithReplace(
priceListsUpsert,
{ relations: ["price_list_rules"] },
sharedContext
)
const { entities, performedActions } =
await this.priceListService_.upsertWithReplace(
priceListsUpsert,
{ relations: ["price_list_rules"] },
sharedContext
)
composeAllEvents({
eventBuilders,
performedActions,
sharedContext,
})
return entities
}
@@ -1539,11 +1539,18 @@ export default class PricingModuleService
})
.filter(Boolean)
const { entities } = await this.priceListService_.upsertWithReplace(
priceListsUpsert,
{ relations: ["price_list_rules"] },
sharedContext
)
const { entities, performedActions } =
await this.priceListService_.upsertWithReplace(
priceListsUpsert,
{ relations: ["price_list_rules"] },
sharedContext
)
composeAllEvents({
eventBuilders,
performedActions,
sharedContext,
})
return entities
}
@@ -1582,6 +1589,26 @@ export default class PricingModuleService
}
}
const composeAllEvents = ({
eventBuilders,
performedActions,
sharedContext,
}) => {
for (const action of Object.keys(performedActions)) {
for (const entity of Object.keys(performedActions[action])) {
const eventName = action + upperCaseFirst(entity)
if (!eventBuilders[eventName]) {
continue
}
eventBuilders[eventName]({
data: performedActions[action][entity] ?? [],
sharedContext,
})
}
}
}
const isTaxInclusive = (
priceRules: InferEntityType<typeof PriceRule>[],
preferences: InferEntityType<typeof PricePreference>[],