fix(pricing): events (#11742)
This commit is contained in:
committed by
GitHub
parent
cc1309d370
commit
16d7294de8
5
.changeset/tender-horses-jog.md
Normal file
5
.changeset/tender-horses-jog.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@medusajs/pricing": patch
|
||||
---
|
||||
|
||||
fix(pricing): emit events
|
||||
@@ -825,6 +825,32 @@ moduleIntegrationTestRunner<IPricingModuleService>({
|
||||
},
|
||||
])
|
||||
|
||||
const events = eventBusEmitSpy.mock.calls[2][0]
|
||||
expect(events).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
name: "pricing.price-rule.created",
|
||||
}),
|
||||
expect.objectContaining({
|
||||
name: "pricing.price-rule.created",
|
||||
}),
|
||||
expect.objectContaining({
|
||||
name: "pricing.price.updated",
|
||||
metadata: {
|
||||
source: "pricing",
|
||||
object: "price",
|
||||
action: "updated",
|
||||
},
|
||||
data: {
|
||||
id: "test-price-id",
|
||||
},
|
||||
}),
|
||||
expect.objectContaining({
|
||||
name: "pricing.price-rule.deleted",
|
||||
}),
|
||||
])
|
||||
)
|
||||
|
||||
const [priceList] = await service.listPriceLists(
|
||||
{ id: ["price-list-1"] },
|
||||
{
|
||||
|
||||
@@ -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>[],
|
||||
|
||||
@@ -36,11 +36,11 @@ export const eventBuilders = {
|
||||
object: "price_list_rule",
|
||||
eventName: PricingEvents.PRICE_LIST_RULE_CREATED,
|
||||
}),
|
||||
attachedPriceListRule: moduleEventBuilderFactory({
|
||||
updatedPriceSet: moduleEventBuilderFactory({
|
||||
source: Modules.PRICING,
|
||||
action: CommonEvents.ATTACHED,
|
||||
object: "price_list_rule",
|
||||
eventName: PricingEvents.PRICE_LIST_RULE_ATTACHED,
|
||||
action: CommonEvents.UPDATED,
|
||||
object: "price_set",
|
||||
eventName: PricingEvents.PRICE_SET_UPDATED,
|
||||
}),
|
||||
updatedPrice: moduleEventBuilderFactory({
|
||||
source: Modules.PRICING,
|
||||
@@ -48,18 +48,48 @@ export const eventBuilders = {
|
||||
object: "price",
|
||||
eventName: PricingEvents.PRICE_UPDATED,
|
||||
}),
|
||||
updatedPriceList: moduleEventBuilderFactory({
|
||||
source: Modules.PRICING,
|
||||
action: CommonEvents.UPDATED,
|
||||
object: "price_list",
|
||||
eventName: PricingEvents.PRICE_LIST_UPDATED,
|
||||
}),
|
||||
updatedPriceListRule: moduleEventBuilderFactory({
|
||||
source: Modules.PRICING,
|
||||
action: CommonEvents.UPDATED,
|
||||
object: "price_list_rule",
|
||||
eventName: PricingEvents.PRICE_LIST_RULE_UPDATED,
|
||||
}),
|
||||
updatedPriceRule: moduleEventBuilderFactory({
|
||||
source: Modules.PRICING,
|
||||
action: CommonEvents.UPDATED,
|
||||
object: "price_rule",
|
||||
eventName: PricingEvents.PRICE_RULE_UPDATED,
|
||||
}),
|
||||
deletedPriceSet: moduleEventBuilderFactory({
|
||||
source: Modules.PRICING,
|
||||
action: CommonEvents.DELETED,
|
||||
object: "price_set",
|
||||
eventName: PricingEvents.PRICE_SET_DELETED,
|
||||
}),
|
||||
deletedPrice: moduleEventBuilderFactory({
|
||||
source: Modules.PRICING,
|
||||
action: CommonEvents.DELETED,
|
||||
object: "price",
|
||||
eventName: PricingEvents.PRICE_DELETED,
|
||||
}),
|
||||
deletedPriceList: moduleEventBuilderFactory({
|
||||
source: Modules.PRICING,
|
||||
action: CommonEvents.DELETED,
|
||||
object: "price_list",
|
||||
eventName: PricingEvents.PRICE_LIST_DELETED,
|
||||
}),
|
||||
deletedPriceListRule: moduleEventBuilderFactory({
|
||||
source: Modules.PRICING,
|
||||
action: CommonEvents.DELETED,
|
||||
object: "price_list_rule",
|
||||
eventName: PricingEvents.PRICE_LIST_RULE_DELETED,
|
||||
}),
|
||||
deletedPriceRule: moduleEventBuilderFactory({
|
||||
source: Modules.PRICING,
|
||||
action: CommonEvents.DELETED,
|
||||
|
||||
Reference in New Issue
Block a user