Skip to content

Tích hợp

1. Sister Services

SisterHướngBề mặtAuthFailure ModeIdempotency
@nx/saleKafka PAYMENT_SUCCESSdelivery at-least-once; consumer skip những lần đã xử lý qua tracking lookup(SALE_ORDER, saleOrderId, stockId)
@nx/saleKafka KITCHEN_TICKET_ITEM_STATUS_CHANGEDat-least-oncetheo (saleOrderId, kitchenTicketItemId, materialId)
@nx/saleKafka MATERIAL_STOCK_CHANGEDpost-commit fire-and-forgettheo id sự kiện stock
@nx/financeKafka PURCHASE_ORDER_RECEIVEDpost-commit fire-and-forget; chỉ khi payments[] không rỗng(POREC, purchaseOrderId) phía consumer
@nx/commerceHTTP — gọi trực tiếp InventoryService.createInventoryForProductVariant / updateInventoryForProductVariant (trong TX dùng chung)JWT (service-to-service)rollback TX khi lỗiensureInventoryItem
@nx/commerce (CDC)Kafka CDC nx.seller.public.product_variant (Debezium)at-least-onceensureInventoryItem là idempotent
@nx/identity (CDC)Kafka CDC nx.seller.public.merchant (Debezium)at-least-onceensureDefaultLocation idempotent
@nx/identityHTTP — JWT verify qua JWKS (/jw-certs)JWTretry / circuit-break (gateway)request-id propagate
@nx/identityHTTP — lookup permission PolicyDefinitionServiceJWTfallback Redis cachetheo (role, action)
@nx/signalWebSocket emission qua ApplicationWebSocketComponentbest-effort deliverynone (broadcast)

2. Hệ thống bên ngoài

N/A — inventory không gọi trực tiếp bất kỳ API ngoài (third-party) nào. Tất cả tích hợp third-party (vd e-invoice, payment) thuộc các package khác.

3. Luồng cross-service quan trọng

3.1 Sale Payment → Trừ Stock (quan trọng nhất)

Hợp đồng:

  • Sale đảm bảo PAYMENT_SUCCESS được phát đúng một lần cho mỗi chuyển trạng thái (post-commit).
  • Inventory đảm bảo xử lý idempotent theo (saleOrderId, stockId).
  • Reservation của material chạy sau khi trừ product trong cùng một handler call (tuần tự, không song song).

3.2 PO Receive → Ghi nhận Expense bên Finance

Hợp đồng:

  • Stock + tracking + snapshot vendor là atomic (một TX duy nhất).
  • Kafka emit xảy ra SAU commit — nếu emit lỗi, finance được thông báo qua reconciliation job (TBD), không rollback in-band.
  • Finance coi PURCHASE_ORDER_RECEIVED là quyền lực: idempotent trên (POREC, purchaseOrderId).

3.3 Onboarding Merchant → Seed Default Location

Hợp đồng: idempotent. Re-delivery là no-op.

3.4 ProductVariant Create → Seed Inventory

Hai đường song song:

Đường A — HTTP trực tiếp (đồng bộ, trong TX của commerce):

Đường B — CDC (bất đồng bộ, hồi tố):

Cả hai đường hội tụ về cùng upsert idempotent ensureInventoryItem.

4. Tính ổn định Hợp đồng

Bề mặtTính ổn địnhVersioning
HTTP /v1/api/inventory/*stabletiền tố URL /v1/
Kafka topic payment.successstablepayload chỉ thêm field
Kafka topic purchase-order.receivedstablepayload chỉ thêm field
Kafka topic material.stock-changedbetacó thể thêm field
Kafka topic material.transferredbeta
CDC topic (nx.seller.public.*)stableđiều khiển bởi config Debezium
WebSocket topic observation/inventory/inventory-stockstableđường room có version

5. Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.