Implement basic event deduplication

This commit is contained in:
Dominic Ferrando
2026-07-17 12:13:20 -04:00
parent 29c55a1bf1
commit 1ffc2fe79d
4 changed files with 43 additions and 11 deletions
+4
View File
@@ -45,6 +45,7 @@ class ApparelOrdersService {
types: {
"apparel_order_create": defineEventType({
schemas: { payload: t.Object({ wOrder: t.Object({}) }), state: t.Null() },
dedupeKey: (p) => (p.wOrder as Webflow.Orders.Order).orderId,
processor: async (payload) => {
const wOrder = payload.wOrder as Webflow.Orders.Order;
@@ -76,6 +77,7 @@ class ApparelOrdersService {
}),
"apparel_order_fulfill": defineEventType({
schemas: { payload: t.Object({ wOrderId: t.String(), shipment: t.Object({}) }), state: t.Null() },
dedupeKey: (p) => `${p.wOrderId}:${(p.shipment as Printful.Webhook.PackageShipped["data"]["shipment"]).tracking_number}`,
processor: async (payload) => {
const wOrderId = payload.wOrderId;
const shipment = payload.shipment as Printful.Webhook.PackageShipped["data"]["shipment"];
@@ -131,6 +133,7 @@ class ApparelSyncService {
t.Null()
])
},
dedupeKey: (p) => (p.filter?.pProductIds ?? []).join(","),
processor: async (payload, setState) => {
await this.ProductSyncer.syncApparel({
filter: payload.filter,
@@ -145,6 +148,7 @@ class ApparelSyncService {
payload: t.Object({ wProductId: t.String() }),
state: t.Union([t.Object({}), t.Null()])
},
dedupeKey: (p) => p.wProductId,
processor: async (payload) => {
await this.Webflow.Products.remove(payload.wProductId);
}