Skip to content

Kiến trúc

1. System Context (C4 L1)

2. Container View (C4 L2)

3. Component View (C4 L3) — Phân lớp nội bộ

LớpTrách nhiệm
Routes13 base path trong RestPaths
ControllersAuth gate, permission, mapping DTO
ServicesBusiness logic, transaction, phát sự kiện
RepositoriesDrizzle queries, soft-delete, FOR UPDATE locks
ComponentsKafka producer, WebSocket emitter, Redis cache

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

Thực thểTrạng tháiSơ đồ
SaleOrderDRAFT, PROCESSING, PARTIAL, COMPLETED, CANCELLED
SaleCheckPROCESSING, COMPLETED, CANCELLED
KitchenTicketPENDING, PROCESSING, READY, COMPLETED, VOIDED
KitchenTicketItemPENDING, COOKING, READY, SERVED, VOIDED
AllocationUsageACTIVE, SUCCESS, CANCELLED, EXPIRED
ReservationPENDING, CONFIRMED, CANCELLED, CHECKED_IN
PosSessionOPEN, CLOSED

SaleOrder

TừSự kiệnĐếnTrigger
DRAFTcheckoutPROCESSINGCheckoutService.checkout
PROCESSINGrevertDRAFTCheckoutService.revertCheckout
PROCESSINGpayment success (partial)PARTIALwebhook MQ-Pay → _handleOrderPaymentSuccess
PROCESSING / PARTIALpayment success (full)COMPLETEDtương tự
*cancel / fail / expireCANCELLEDwebhook handler + hủy thủ công

SaleCheck

KitchenTicket

Máy trạng thái cấp ticket khác với cấp item — xem Mô hình miền §4.3 để biết ánh xạ trạng thái.

KitchenTicketItem

Mỗi lần đổi trạng thái item phát Kafka KITCHEN_TICKET_ITEM_STATUS_CHANGED được tiêu thụ bởi @nx/inventory.

AllocationUsage

Reservation

PosSession

5. Kịch bản runtime

5.1 Cart → Checkout → Thanh toán → Trừ kho

5.2 Thêm item — Pessimistic Lock

Ngăn race duplicate-merge khi hai thiết bị thêm cùng một item cùng lúc.

5.3 Gửi xuống Bếp → Nấu → Phục vụ

5.4 Tách hóa đơn (SaleCheck)

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

Mối quan tâmService này xử lý ra sao
AuthNJWT (ES256, JWKS từ identity); BASIC cho service-to-service. Endpoint webhook không có auth (tin cậy nội bộ).
AuthZCasbin qua PolicyDefinitionService (cache trong Redis)
i18njsonb { en, vi }; header Accept-Language
LoggingIGNIS có cấu trúc (key: %s); request-id được lan truyền
IdempotencyPer-saleOrderId cho Kafka emit; per-saleOrderId khi cộng điểm khách hàng; webhook handler kiểm tra transition đã có
Bảo vệ raceSELECT ... FOR UPDATE trên flow add-item và bulk update
Soft-deleteSoftDeletableRepository (deletedAt)
IDsSnowflake qua IdGenerator, worker 3
Dual modeApplicationRoles.API / WORKER trong constants — cho việc tách API/worker tương lai (hiện tại là single-process)

7. Trang liên quan

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