# Kiến Trúc Đa Ngành Hàng (Multi-vertical Architecture) ## Tổng Quan Tài liệu này mô tả kiến trúc hỗ trợ **hoạt động kinh doanh đa ngành hàng** trong nền tảng GoodGo. Thiết kế cho phép một Merchant vận hành trên nhiều ngành dọc (Retail, F&B, Services) mà không tạo ra "spaghetti code." ## Nguyên Tắc Thiết Kế > **Merchant Service quản lý "AI" (Định danh) và "LUẬT" (Cấu hình), còn "CÁCH" (Thực thi) được ủy quyền cho các service vệ tinh.** ## Các Tầng Kiến Trúc ```mermaid graph TB subgraph Clients ["📱 Tầng Client"] POS["Smart POS"] WEB["Web Dashboard"] APP["Mobile App"] end subgraph Gateway ["⚡ API Gateway"] TRAEFIK["Traefik"] end subgraph Core ["🟡 Tầng Lõi - Định Danh & Cấu Hình"] IAM["🔐 IAM Service"] MERCHANT["🏪 Merchant Service"] WALLET["💰 Wallet Service"] end subgraph Orchestration ["🔴 Tầng Điều Phối"] CATALOG["📦 Catalog Service"] ORDER["📝 Order Service"] end subgraph Verticals ["🔵 Engines Ngành Dọc"] INVENTORY["🏭 Inventory"] BOOKING["📅 Booking"] FNB["🍳 F&B Engine"] end Clients --> Gateway Gateway --> Core Gateway --> Orchestration ORDER --> Verticals ``` ## Trách Nhiệm Các Tầng ### 1. Tầng Lõi (Cấu Hình & Định Danh) | Service | Trách Nhiệm | |---------|-------------| | **IAM Service** | Xác thực người dùng, vai trò, quyền | | **Merchant Service** | Định danh shop, cờ tính năng, thiết lập nghiệp vụ | | **Wallet Service** | Xử lý thanh toán, quản lý số dư | ### 2. Tầng Điều Phối | Service | Trách Nhiệm | |---------|-------------| | **Catalog Service** | Quản lý sản phẩm đa hình | | **Order Service** | Xử lý đơn hàng với Strategy Pattern | ### 3. Engines Ngành Dọc | Service | Ngành | Logic Chính | |---------|-------|-------------| | **Inventory Service** | Retail, F&B | Quản lý tồn kho, công thức | | **Booking Service** | Dịch vụ | Đặt lịch hẹn | | **F&B Engine** | Food & Beverage | Bàn, phiên, hiển thị bếp | ## Strategy Pattern Cho Xử Lý Đơn Hàng **Order Service** đóng vai trò "bộ não" định tuyến từng dòng hàng đến engine ngành dọc phù hợp dựa trên loại sản phẩm. ```mermaid flowchart LR ORDER["Order Service"] subgraph Strategies ["Các Strategy Dòng Hàng"] RETAIL["RetailStrategy"] SERVICE["ServiceStrategy"] FNB["FnbStrategy"] end ORDER --> |"ProductType.Physical"| RETAIL ORDER --> |"ProductType.Service"| SERVICE ORDER --> |"ProductType.PreparedFood"| FNB RETAIL --> INVENTORY["Inventory Service"] SERVICE --> BOOKING["Booking Service"] FNB --> KITCHEN["F&B Engine"] ``` ### Strategy Interface ```csharp public interface ILineItemStrategy { ProductType SupportedType { get; } Task ValidateAsync(OrderItem item, Guid shopId); Task ExecuteAsync(OrderItem item, Guid shopId); } ``` ### Hỗ Trợ Đơn Hàng Hybrid Một đơn hàng có thể chứa nhiều loại sản phẩm: - ☕ Cà phê (PreparedFood → F&B Engine) - 👕 Áo merchandise (Physical → Inventory Service) - 💆 Voucher spa (Service → Booking Service) Mỗi dòng hàng được xử lý bởi strategy tương ứng. ## Mô Hình Cấu Hình Merchant Service ### Enum BusinessCategory ```csharp public enum BusinessCategory { Retail = 1, // Hàng hóa vật lý FoodBeverage = 2, // Nhà hàng, quán cafe Services = 3, // Spa, salon, phòng khám Other = 99 // Hybrid } ``` ### ShopFeatures (Cờ Tính Năng) ```csharp public record ShopFeatures( bool HasInventory = false, // Bật Inventory Service bool HasBooking = false, // Bật Booking Service bool HasTables = false, // Bật quản lý bàn bool HasKitchen = false, // Bật KDS bool HasShipping = false, // Bật vận chuyển bool HasDelivery = false // Bật giao hàng ); ``` ### Cài Đặt Động (JSONB) Tham số nghiệp vụ cụ thể lưu dạng JSON: ```json { "fnb": { "serviceChargePercent": 5, "defaultTableCapacity": 4 }, "booking": { "slotDurationMinutes": 30, "advanceBookingDays": 14 }, "retail": { "lowStockThreshold": 10 } } ``` ## Ví Dụ Luồng Dữ Liệu ### Luồng Đơn Hàng Retail ```mermaid sequenceDiagram participant POS participant Order as Order Service participant Merchant as Merchant Service participant Inventory as Inventory Service participant Wallet as Wallet Service POS->>Order: Tạo đơn (Hàng vật lý) Order->>Merchant: Lấy ShopFeatures Merchant-->>Order: {HasInventory: true} Order->>Inventory: Kiểm tra tồn kho Inventory-->>Order: Còn hàng Order->>Wallet: Xử lý thanh toán Wallet-->>Order: Thanh toán thành công Order->>Inventory: Trừ tồn kho Order-->>POS: Đơn hàng hoàn tất ``` ### Luồng Đơn Hàng F&B ```mermaid sequenceDiagram participant POS participant Order as Order Service participant FnB as F&B Engine participant Inventory as Inventory Service POS->>Order: Tạo đơn (Bàn 5, Cà phê) Order->>FnB: Thêm vào phiên đang hoạt động FnB->>FnB: Tạo KitchenTicket FnB-->>Order: Ticket đã tạo Note over FnB: Hiển thị trên KDS FnB->>Inventory: Trừ nguyên liệu (tùy chọn) Order-->>POS: Đơn hàng đã xác nhận ``` ## Lợi Ích Của Kiến Trúc Này | Lợi Ích | Mô Tả | |---------|-------| | **Trách Nhiệm Đơn Lẻ** | Mỗi service xử lý một domain | | **Khả Năng Mở Rộng** | Thêm ngành mới không cần sửa core | | **Khả Năng Test** | Các strategy có thể test độc lập | | **Hỗ Trợ Hybrid** | Đơn hàng hỗn hợp xử lý tự nhiên | | **Điều Khiển Bằng Cấu Hình** | Thay đổi hành vi qua cờ tính năng | ## Tài Nguyên Liên Quan - [Kế Hoạch Triển Khai](file:///Users/velikho/.gemini/antigravity/brain/fc592f5c-fd0a-4a19-87d0-d09926a1cdde/implementation_plan.md) - [Domain-Driven Design Skill](file:///Users/velikho/Desktop/WORKING/Base/.agent/skills/domain-driven-design/SKILL.md) - [CQRS Pattern Skill](file:///Users/velikho/Desktop/WORKING/Base/.agent/skills/cqrs-mediatr/SKILL.md) - [Inter-Service Communication](file:///Users/velikho/Desktop/WORKING/Base/.agent/skills/inter-service-communication/SKILL.md)