Skip to content

Kiến trúc

1. Bối cảnh hệ thống (C4 L1)

Commerce không push trực tiếp tới các dịch vụ chị em. Seam tích hợp là CDC (Debezium đọc Postgres WAL). Xem ADR-0002.

2. Góc nhìn Container (C4 L2)

3. Góc nhìn Component (C4 L3) — Phân lớp nội bộ

LớpTrách nhiệm
RoutesBase path trong RestPaths
ControllersCổng auth (jwt/basic), lọc theo vai trò, ánh xạ DTO
ServicesTransaction aggregate, phát EventBus, mã hóa
RepositoriesTruy vấn Drizzle, soft-delete
ComponentsKafka producer, hàng đợi/worker BullMQ, EventBus, WebSocket, search/asset, hai Redis

4. Chỉ mục Máy trạng thái

Thực thểTrạng tháiSơ đồ
ProductDRAFT, ACTIVATED, DEACTIVATED, ARCHIVED
ProductVariantDRAFT, ACTIVATED, DEACTIVATED, ARCHIVED
Merchant onboardingcờ boolean theo từng bước

Trạng thái Product / ProductVariant

ARCHIVED là trạng thái cuối. Statuses được tái sử dụng từ @venizia/ignis (ProductStatuses / ProductVariantStatuses). Giá trị DRAFT cũng tồn tại trong enum.

ProductVariant.type (bộ phân biệt cấu trúc)

Không phải vòng đời — đây là type điều khiển hành vi tồn kho & gói. Nguồn: core/.../product-variant/constants.ts.

TypeLưu khoBOMGhi chú
STORABLEvật lý, có tồn kho (mặc định)
CONSUMABLEvật lý, không lưu kho
SERVICEkhông có hàng hóa vật lý
KITnổ tung khi bán qua Material
COMBOảo; nổ tung khi bán qua ProductVariant thành phần
MANUFACTUREDsản xuất để lưu kho

Xem ADR-0003.

Các bước onboarding Merchant

Cờ MerchantOnboardingSteps nằm trong Merchant.metadata.onboarding. ProductAggregateCreatedListener.handleMarkOnboardingStepComplete đánh dấu bước PRODUCT khi tạo product đầu tiên.

5. Kịch bản Runtime

5.1 Tạo Product Aggregate + Đồng bộ đa Merchant

Transaction aggregate commit trước khi phát EventBus — đồng bộ là best-effort/async. Xem ADR-0001.

5.2 Onboarding Organizer (đồng bộ)

Không có hàng đợi fan-out COMMERCE_INITIALIZED_* — thiết lập downstream được điều khiển bởi CDC.

5.3 Thông tin thuế Merchant → TaxInfo (CDC)

MST/hóa đơn điện tử được lưu trong Merchant.metadata.tax (không phải cột). TaxInfo là nguồn đọc downstream có thẩm quyền. Xem luồng thông tin thuế merchant.

5.4 Tích hợp Provider được mã hóa

6. Mối quan tâm xuyên suốt

Mối quan tâmDịch vụ này xử lý như thế nào
AuthNJWT (ES256, JWKS từ identity); BASIC cho service-to-service. VerifierApplication.
AuthZLọc theo vai trò qua useRequestContext() + AppFixedRoles; quy tắc Casbin GROUP của PolicyDefinition được cache trong authorization Redis
i18njsonb { en, vi } qua cột i18n()
LoggingIGNIS có cấu trúc (key: %s)
Mã hóaEncryptService AES-256-GCM với APP_ENV_APPLICATION_SECRET; getDecryptedCredential chỉ nội bộ
Seam tích hợpCDC (Debezium WAL) — Kafka chỉ producer, không produce cấp ứng dụng
Sao chép asyncEventBus in-process → BullMQ SYNC_PRODUCT_QUEUE → worker
Soft-deleteSoftDeletableRepository (deletedAt) trên tất cả thực thể
IDsSnowflake qua IdGenerator, worker 2; slug tự sinh nếu vắng
Chế độ képApplicationRoles.API / WORKER; CDC consumer + workers chỉ ở vai trò WORKER

7. Trang liên quan

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