chore(): Emit events in batch and index process event ids in batch (#12097)
**What** First iteration to prevent events from overwhelming the systems. - Group emitted event ids when possible instead of creating a message per id which leads to reduced amount of events to process massively in cases of import for example - Update the index engine to process event data in batches of 100 - Update event handling by the index engine to be able to upsert by batch as well - Fix index engine build config for intermediate listeners inferrence
This commit is contained in:
@@ -26,6 +26,7 @@ import {
|
||||
MedusaContext,
|
||||
MedusaError,
|
||||
MedusaService,
|
||||
moduleEventBuilderFactory,
|
||||
Modules,
|
||||
partitionArray,
|
||||
} from "@medusajs/framework/utils"
|
||||
@@ -248,16 +249,15 @@ export default class InventoryModuleService
|
||||
const toCreate = Array.isArray(input) ? input : [input]
|
||||
const created = await this.createReservationItems_(toCreate, context)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData(
|
||||
created.map((reservationItem) => ({
|
||||
eventName: InventoryEvents.RESERVATION_ITEM_CREATED,
|
||||
source: Modules.INVENTORY,
|
||||
action: CommonEvents.CREATED,
|
||||
object: "reservation-item",
|
||||
context,
|
||||
data: { id: reservationItem.id },
|
||||
}))
|
||||
)
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.CREATED,
|
||||
object: "reservation-item",
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.RESERVATION_ITEM_CREATED,
|
||||
})({
|
||||
data: created,
|
||||
sharedContext: context,
|
||||
})
|
||||
|
||||
const serializedReservations = await this.baseRepository_.serialize<
|
||||
InventoryTypes.ReservationItemDTO[] | InventoryTypes.ReservationItemDTO
|
||||
@@ -350,16 +350,15 @@ export default class InventoryModuleService
|
||||
)
|
||||
const result = await this.createInventoryItems_(toCreate, context)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData(
|
||||
result.map((inventoryItem) => ({
|
||||
eventName: InventoryEvents.INVENTORY_ITEM_CREATED,
|
||||
source: Modules.INVENTORY,
|
||||
action: CommonEvents.CREATED,
|
||||
object: "inventory-item",
|
||||
context,
|
||||
data: { id: inventoryItem.id },
|
||||
}))
|
||||
)
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.CREATED,
|
||||
object: "inventory-item",
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.INVENTORY_ITEM_CREATED,
|
||||
})({
|
||||
data: result,
|
||||
sharedContext: context,
|
||||
})
|
||||
|
||||
const serializedItems = await this.baseRepository_.serialize<
|
||||
InventoryTypes.InventoryItemDTO | InventoryTypes.InventoryItemDTO[]
|
||||
@@ -406,16 +405,15 @@ export default class InventoryModuleService
|
||||
|
||||
const created = await this.createInventoryLevels_(toCreate, context)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData(
|
||||
created.map((inventoryLevel) => ({
|
||||
eventName: InventoryEvents.INVENTORY_LEVEL_CREATED,
|
||||
source: Modules.INVENTORY,
|
||||
action: CommonEvents.CREATED,
|
||||
object: "inventory-level",
|
||||
context,
|
||||
data: { id: inventoryLevel.id },
|
||||
}))
|
||||
)
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.CREATED,
|
||||
object: "inventory-level",
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.INVENTORY_LEVEL_CREATED,
|
||||
})({
|
||||
data: created,
|
||||
sharedContext: context,
|
||||
})
|
||||
|
||||
const serialized = await this.baseRepository_.serialize<
|
||||
InventoryTypes.InventoryLevelDTO[] | InventoryTypes.InventoryLevelDTO
|
||||
@@ -462,16 +460,15 @@ export default class InventoryModuleService
|
||||
|
||||
const result = await this.updateInventoryItems_(updates, context)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData(
|
||||
result.map((inventoryItem) => ({
|
||||
eventName: InventoryEvents.INVENTORY_ITEM_UPDATED,
|
||||
source: Modules.INVENTORY,
|
||||
action: CommonEvents.UPDATED,
|
||||
object: "inventory-item",
|
||||
context,
|
||||
data: { id: inventoryItem.id },
|
||||
}))
|
||||
)
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.UPDATED,
|
||||
object: "inventory-item",
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.INVENTORY_ITEM_UPDATED,
|
||||
})({
|
||||
data: result,
|
||||
sharedContext: context,
|
||||
})
|
||||
|
||||
const serializedItems = await this.baseRepository_.serialize<
|
||||
InventoryTypes.InventoryItemDTO | InventoryTypes.InventoryItemDTO[]
|
||||
@@ -503,16 +500,15 @@ export default class InventoryModuleService
|
||||
context
|
||||
)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData(
|
||||
result[0].map((inventoryLevel) => ({
|
||||
eventName: InventoryEvents.INVENTORY_LEVEL_DELETED,
|
||||
source: Modules.INVENTORY,
|
||||
action: CommonEvents.DELETED,
|
||||
object: "inventory-level",
|
||||
context,
|
||||
data: { id: inventoryLevel.id },
|
||||
}))
|
||||
)
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.DELETED,
|
||||
object: "inventory-level",
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.INVENTORY_LEVEL_DELETED,
|
||||
})({
|
||||
data: result[0],
|
||||
sharedContext: context,
|
||||
})
|
||||
|
||||
return result
|
||||
}
|
||||
@@ -524,6 +520,7 @@ export default class InventoryModuleService
|
||||
* @param context
|
||||
*/
|
||||
@InjectTransactionManager()
|
||||
@EmitEvents()
|
||||
async deleteInventoryLevel(
|
||||
inventoryItemId: string,
|
||||
locationId: string,
|
||||
@@ -535,13 +532,14 @@ export default class InventoryModuleService
|
||||
context
|
||||
)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData({
|
||||
eventName: InventoryEvents.INVENTORY_LEVEL_DELETED,
|
||||
source: Modules.INVENTORY,
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.DELETED,
|
||||
object: "inventory-level",
|
||||
context,
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.INVENTORY_LEVEL_DELETED,
|
||||
})({
|
||||
data: { id: inventoryLevel.id },
|
||||
sharedContext: context,
|
||||
})
|
||||
|
||||
if (!inventoryLevel) {
|
||||
@@ -579,16 +577,15 @@ export default class InventoryModuleService
|
||||
|
||||
const levels = await this.updateInventoryLevels_(input, context)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData(
|
||||
levels.map((inventoryLevel) => ({
|
||||
eventName: InventoryEvents.INVENTORY_LEVEL_UPDATED,
|
||||
source: Modules.INVENTORY,
|
||||
action: CommonEvents.UPDATED,
|
||||
object: "inventory-level",
|
||||
context,
|
||||
data: { id: inventoryLevel.id },
|
||||
}))
|
||||
)
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.UPDATED,
|
||||
object: "inventory-level",
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.INVENTORY_LEVEL_UPDATED,
|
||||
})({
|
||||
data: levels,
|
||||
sharedContext: context,
|
||||
})
|
||||
|
||||
const updatedLevels = await this.baseRepository_.serialize<
|
||||
InventoryTypes.InventoryLevelDTO | InventoryTypes.InventoryLevelDTO[]
|
||||
@@ -662,16 +659,15 @@ export default class InventoryModuleService
|
||||
const update = Array.isArray(input) ? input : [input]
|
||||
const result = await this.updateReservationItems_(update, context)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData(
|
||||
result.map((reservationItem) => ({
|
||||
eventName: InventoryEvents.RESERVATION_ITEM_UPDATED,
|
||||
source: Modules.INVENTORY,
|
||||
action: CommonEvents.UPDATED,
|
||||
object: "reservation-item",
|
||||
context,
|
||||
data: { id: reservationItem.id },
|
||||
}))
|
||||
)
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.UPDATED,
|
||||
object: "reservation-item",
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.RESERVATION_ITEM_UPDATED,
|
||||
})({
|
||||
data: result,
|
||||
sharedContext: context,
|
||||
})
|
||||
|
||||
const serialized = await this.baseRepository_.serialize<
|
||||
InventoryTypes.ReservationItemDTO | InventoryTypes.ReservationItemDTO[]
|
||||
@@ -867,16 +863,15 @@ export default class InventoryModuleService
|
||||
context
|
||||
)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData(
|
||||
reservations.map((reservationItem) => ({
|
||||
eventName: InventoryEvents.RESERVATION_ITEM_DELETED,
|
||||
source: Modules.INVENTORY,
|
||||
action: CommonEvents.DELETED,
|
||||
object: "reservation-item",
|
||||
context,
|
||||
data: { id: reservationItem.id },
|
||||
}))
|
||||
)
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.DELETED,
|
||||
object: "reservation-item",
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.RESERVATION_ITEM_DELETED,
|
||||
})({
|
||||
data: reservations,
|
||||
sharedContext: context,
|
||||
})
|
||||
|
||||
await this.adjustInventoryLevelsForReservationsDeletion(
|
||||
reservations,
|
||||
@@ -909,16 +904,15 @@ export default class InventoryModuleService
|
||||
context
|
||||
)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData(
|
||||
reservations.map((reservationItem) => ({
|
||||
eventName: InventoryEvents.RESERVATION_ITEM_DELETED,
|
||||
source: Modules.INVENTORY,
|
||||
action: CommonEvents.DELETED,
|
||||
object: "reservation-item",
|
||||
context,
|
||||
data: { id: reservationItem.id },
|
||||
}))
|
||||
)
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.DELETED,
|
||||
object: "reservation-item",
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.RESERVATION_ITEM_DELETED,
|
||||
})({
|
||||
data: reservations,
|
||||
sharedContext: context,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -946,16 +940,15 @@ export default class InventoryModuleService
|
||||
context
|
||||
)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData(
|
||||
reservations.map((reservationItem) => ({
|
||||
eventName: InventoryEvents.RESERVATION_ITEM_CREATED,
|
||||
source: Modules.INVENTORY,
|
||||
action: CommonEvents.CREATED,
|
||||
object: "reservation-item",
|
||||
context,
|
||||
data: { id: reservationItem.id },
|
||||
}))
|
||||
)
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.CREATED,
|
||||
object: "reservation-item",
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.RESERVATION_ITEM_CREATED,
|
||||
})({
|
||||
data: reservations,
|
||||
sharedContext: context,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1016,13 +1009,14 @@ export default class InventoryModuleService
|
||||
)
|
||||
results.push(result)
|
||||
|
||||
context.messageAggregator?.saveRawMessageData({
|
||||
eventName: InventoryEvents.INVENTORY_LEVEL_UPDATED,
|
||||
source: Modules.INVENTORY,
|
||||
moduleEventBuilderFactory({
|
||||
action: CommonEvents.UPDATED,
|
||||
object: "inventory-level",
|
||||
context,
|
||||
source: Modules.INVENTORY,
|
||||
eventName: InventoryEvents.INVENTORY_LEVEL_UPDATED,
|
||||
})({
|
||||
data: { id: result.id },
|
||||
sharedContext: context,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user