Order Service
Điều phối đơn hàng với Strategy Pattern cho thương mại đa ngành.
Tổng Quan
Order Service là "bộ não" của nền tảng, điều phối đơn hàng qua nhiều ngành dọc sử dụng Strategy Pattern. Service này định tuyến từng dòng hàng đến vertical engine phù hợp (Inventory, Booking, F&B Engine) dựa trên loại sản phẩm.
Tính Năng Chính
- Strategy Pattern - Định tuyến đơn hàng theo loại sản phẩm không dùng if-else
- Đơn hàng Hybrid - Một đơn với nhiều loại mặt hàng (Physical + Service + Food)
- Điều phối Transaction - Luồng Validate → Pay → Execute
- Event-Driven - Phát integration events cho các service downstream
Bối Cảnh Kiến Trúc
graph TB
POS["POS / Web"] --> ORDER["📝 Order Service"]
ORDER --> CATALOG["📦 Catalog Service"]
ORDER --> MERCHANT["🏪 Merchant Service"]
ORDER --> WALLET["💰 Wallet Service"]
ORDER --> INVENTORY["🏭 Inventory Service"]
ORDER --> BOOKING["📅 Booking Service"]
ORDER --> FNB["🍳 F&B Engine"]
style ORDER fill:#e74c3c,stroke:#c0392b,color:#fff
Yêu Cầu
| Yêu cầu | Phiên bản |
|---|---|
| .NET SDK | 10.0.101+ |
| Docker | 24.0+ |
| PostgreSQL | 15+ |
| RabbitMQ | 3.12+ |
Bắt Đầu Nhanh
cd services/order-service-net
cp .env.example .env
dotnet restore
dotnet run --project src/OrderService.API
Cấu Trúc Dự Án
order-service-net/
├── src/
│ ├── OrderService.API/
│ │ ├── Application/
│ │ │ ├── Strategies/ # Các chiến lược dòng hàng
│ │ │ ├── Commands/ # CreateOrder, CancelOrder
│ │ │ └── Queries/ # GetOrder, ListOrders
│ │ └── Controllers/
│ ├── OrderService.Domain/
│ │ ├── AggregatesModel/
│ │ │ └── OrderAggregate/ # Order, OrderItem
│ │ └── Events/
│ └── OrderService.Infrastructure/
└── tests/
API Endpoints
| Method | Endpoint | Mô tả |
|---|---|---|
POST |
/api/v1/orders |
Tạo đơn hàng |
GET |
/api/v1/orders/{id} |
Chi tiết đơn hàng |
GET |
/api/v1/orders |
Danh sách đơn hàng theo shop |
POST |
/api/v1/orders/{id}/pay |
Xử lý thanh toán |
POST |
/api/v1/orders/{id}/cancel |
Hủy đơn hàng |
PATCH |
/api/v1/orders/{id}/items/{itemId}/status |
Cập nhật trạng thái item |
Strategy Pattern
ILineItemStrategy Interface
public interface ILineItemStrategy
{
ProductType SupportedType { get; }
Task ValidateAsync(OrderItem item, Guid shopId);
Task ExecuteAsync(OrderItem item, Guid shopId);
}
Các Strategies Có Sẵn
| Strategy | Product Type | Service Đích |
|---|---|---|
RetailStrategy |
Physical | Inventory Service |
ServiceStrategy |
Service | Booking Service |
FnbStrategy |
PreparedFood | F&B Engine |
Luồng Xử Lý Đơn Hàng
sequenceDiagram
participant POS
participant Order as Order Service
participant Catalog as Catalog Service
participant Strategy as Strategy Factory
participant Target as Target Service
POS->>Order: Tạo Đơn Hàng
Order->>Catalog: Lấy Loại Sản Phẩm
loop Mỗi Dòng Hàng
Order->>Strategy: Lấy Strategy theo Loại
Strategy->>Target: Validate
Target-->>Strategy: OK
end
Order->>Order: Xử Lý Thanh Toán
loop Mỗi Dòng Hàng
Order->>Strategy: Lấy Strategy theo Loại
Strategy->>Target: Execute
end
Order-->>POS: Đơn Hàng Hoàn Tất
Domain Model
Order Aggregate
public class Order : Entity, IAggregateRoot
{
public Guid ShopId { get; private set; }
public Guid? CustomerId { get; private set; }
public OrderStatus Status { get; private set; }
public decimal TotalAmount { get; private set; }
private readonly List<OrderItem> _items;
public IReadOnlyCollection<OrderItem> Items => _items.AsReadOnly();
public void AddItem(Product product, int quantity);
public void MarkAsPaid();
public void Cancel(string reason);
}
Integration Events
| Event | Trigger | Subscribers |
|---|---|---|
OrderCreatedEvent |
Đặt đơn hàng | Analytics |
OrderPaidEvent |
Thanh toán thành công | Wallet, Notification |
OrderCancelledEvent |
Hủy đơn hàng | Inventory (rollback) |
KitchenTicketCreatedEvent |
Thêm món F&B | F&B Engine |
Services Liên Quan
- Catalog Service - Dữ liệu sản phẩm
- Inventory Service - Quản lý tồn kho
- Booking Service - Lịch hẹn
- F&B Engine - Hiển thị bếp
Tài Nguyên
License
Proprietary - GoodGo Platform