feat: event aggregator (#6218)

What:
- Event Aggregator Util
- Preparation for normalizing event in a new format (backward compatible with the current format)
- GQL Schema to joiner config and some Entities configured
- Link modules emmiting events
This commit is contained in:
Carlos R. L. Rodrigues authored and GitHub committed 2024-02-05 11:59:10 +00:00
1 parent 73fd92a1af
commit 884428a1b5
66 files changed
+1407 -749

No files matched your search

+17 -32
View File
@@ -1,6 +1,7 @@
import { Modules } from "@medusajs/modules-sdk"
import { ModuleJoinerConfig } from "@medusajs/types"
import { InventoryItem, InventoryLevel, ReservationItem } from "./models"
import moduleSchema from "./schema"
export const joinerConfig: ModuleJoinerConfig = {
serviceName: Modules.INVENTORY,
@@ -10,46 +11,30 @@ export const joinerConfig: ModuleJoinerConfig = {
inventory_level_id: InventoryLevel.name,
reservation_item_id: ReservationItem.name,
},
schema: moduleSchema,
alias: [
{
name: "inventory_items",
},
{
name: "inventory",
},
{
name: "inventory_level",
name: ["inventory_items", "inventory"],
args: {
entity: "InventoryItem",
},
},
{
name: ["inventory_level", "inventory_levels"],
args: {
entity: "InventoryLevel",
methodSuffix: "InventoryLevels",
},
},
{
name: "inventory_levels",
args: {
methodSuffix: "InventoryLevels",
},
},
{
name: "reservation_items",
args: {
methodSuffix: "ReservationItems",
},
},
{
name: "reservation_item",
args: {
methodSuffix: "ReservationItems",
},
},
{
name: "reservation",
args: {
methodSuffix: "ReservationItems",
},
},
{
name: "reservations",
name: [
"reservation",
"reservations",
"reservation_item",
"reservation_items",
],
args: {
entity: "ReservationItem",
methodSuffix: "ReservationItems",
},
},
@@ -6,9 +6,11 @@ import {
DeleteDateColumn,
Entity,
Index,
OneToMany,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm"
import { InventoryLevel } from "./inventory-level"
@Entity()
export class InventoryItem {
@@ -67,6 +69,12 @@ export class InventoryItem {
@Column({ type: "jsonb", nullable: true })
metadata: Record<string, unknown> | null
@OneToMany(
() => InventoryLevel,
(inventoryLevel) => inventoryLevel.inventory_item
)
inventory_levels!: InventoryLevel[]
@BeforeInsert()
private beforeInsert(): void {
this.id = generateEntityId(this.id, "iitem")
@@ -6,9 +6,12 @@ import {
DeleteDateColumn,
Entity,
Index,
JoinColumn,
ManyToOne,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm"
import { InventoryItem } from "./inventory-item"
@Entity()
@Index(["inventory_item_id", "location_id"], { unique: true })
@@ -45,6 +48,10 @@ export class InventoryLevel {
@Column({ type: "jsonb", nullable: true })
metadata: Record<string, unknown> | null
@ManyToOne(() => InventoryItem)
@JoinColumn({ name: "inventory_item_id" })
inventory_item: InventoryItem
@BeforeInsert()
private beforeInsert(): void {
this.id = generateEntityId(this.id, "ilev")
+55
View File
@@ -0,0 +1,55 @@
export default `
scalar DateTime
scalar JSON
type InventoryItem {
id: ID!
created_at: DateTime!
updated_at: DateTime!
deleted_at: DateTime
sku: String
origin_country: String
hs_code: String
mid_code: String
material: String
weight: Int
length: Int
height: Int
width: Int
requires_shipping: Boolean!
description: String
title: String
thumbnail: String
metadata: JSON
inventory_levels: [InventoryLevel]
}
type InventoryLevel {
id: ID!
created_at: DateTime!
updated_at: DateTime!
deleted_at: DateTime
inventory_item_id: String!
location_id: String!
stocked_quantity: Int!
reserved_quantity: Int!
incoming_quantity: Int!
metadata: JSON
}
type ReservationItem {
id: ID!
created_at: DateTime!
updated_at: DateTime!
deleted_at: DateTime
line_item_id: String
inventory_item_id: String!
location_id: String!
quantity: Int!
external_id: String
description: String
created_by: String
metadata: JSON
}
`