Cherry là một hệ thống web bán đồ ăn nhanh được phát triển bằng .NET 8 theo kiến trúc Microservices. Ứng dụng hỗ trợ:
- Người dùng: duyệt sản phẩm, thêm vào giỏ hàng, áp dụng mã giảm giá, đặt hàng.
- Quản trị viên: quản lý sản phẩm, khuyến mãi, đơn hàng.
- Hệ thống: gửi email, quản lý reward points, xử lý thanh toán và giao tiếp giữa các dịch vụ qua message bus.
Repo gốc: Cherry - GitHub
flowchart TD
A[Khách hàng đăng nhập] --> B[Xem danh sách sản phẩm]
B --> C[Thêm sản phẩm vào giỏ hàng]
C --> D[Áp dụng mã giảm giá]
D --> E[Thanh toán đơn hàng]
E --> F[Hệ thống tạo Order]
F --> G[Message Bus phát sự kiện]
G --> H[Reward Service cộng điểm]
G --> I[Email Service gửi email xác nhận]
H --> J[Cập nhật lịch sử thưởng]
flowchart LR
subgraph Client
A[Blazor/React Frontend]
end
subgraph Gateway
B[Ocelot API Gateway]
end
subgraph Services
C[AuthAPI]
D[ProductAPI]
E[OrderAPI]
F[CouponAPI]
G[ShoppingCartAPI]
H[RewardAPI]
I[EmailAPI]
end
subgraph Infra
J[(SQL Server DBs)]
K[Azure Service Bus]
end
A <--> B
B <--> C
B <--> D
B <--> E
B <--> F
B <--> G
B <--> H
B <--> I
C <--> J
D <--> J
E <--> J
F <--> J
G <--> J
H <--> J
I <--> J
E <--> K
H <--> K
I <--> K
- Backend: .NET 8 (ASP.NET Core, Web API, MVC)
- Frontend: Blazor Server / Razor Pages
- Database: SQL Server
- Message Bus: Azure Service Bus
- API Gateway: Ocelot
- Authentication: Identity + JWT Bearer
- Logging & Monitoring: Serilog
- AuthAPI: Xác thực và phân quyền người dùng.
- ProductAPI: CRUD sản phẩm.
- OrderAPI: Xử lý đơn hàng, thanh toán.
- CouponAPI: Quản lý và áp dụng mã giảm giá.
- ShoppingCartAPI: Giỏ hàng người dùng.
- RewardAPI: Tính toán và cộng điểm thưởng khi hoàn thành giao dịch.
- EmailAPI: Gửi email xác nhận đơn hàng, thông báo khuyến mãi.
- Là khách hàng, tôi muốn đăng nhập để lưu lịch sử mua hàng.
- Là khách hàng, tôi muốn thêm sản phẩm vào giỏ hàng để mua nhiều món cùng lúc.
- Là khách hàng, tôi muốn sử dụng mã giảm giá để tiết kiệm chi phí.
- Là khách hàng, tôi muốn nhận email xác nhận đơn hàng để theo dõi.
- Là admin, tôi muốn thêm/sửa/xóa sản phẩm để quản lý menu.
- Là admin, tôi muốn quản lý mã giảm giá để kích thích bán hàng.
- Là admin, tôi muốn xem danh sách đơn hàng để xử lý nhanh chóng.
erDiagram
USER {
int Id
string Email
string PasswordHash
string Role
}
PRODUCT {
int Id
string Name
string Description
decimal Price
string Category
}
CART {
int Id
int UserId
}
CART_ITEM {
int Id
int CartId
int ProductId
int Quantity
}
ORDER {
int Id
int UserId
decimal TotalAmount
string Status
datetime CreatedAt
}
ORDER_ITEM {
int Id
int OrderId
int ProductId
int Quantity
decimal Price
}
COUPON {
int Id
string Code
decimal Discount
datetime ExpiryDate
}
REWARD {
int Id
int UserId
int Points
}
USER ||--o{ CART : owns
CART ||--|{ CART_ITEM : contains
USER ||--o{ ORDER : places
ORDER ||--|{ ORDER_ITEM : contains
USER ||--o{ REWARD : earns
POST /api/auth/register→ Đăng kýPOST /api/auth/login→ Đăng nhập
GET /api/products→ Lấy danh sách sản phẩmGET /api/products/{id}→ Chi tiết sản phẩmPOST /api/products→ (Admin) Thêm sản phẩmPUT /api/products/{id}→ (Admin) Sửa sản phẩmDELETE /api/products/{id}→ (Admin) Xóa sản phẩm
GET /api/cart/{userId}→ Lấy giỏ hàngPOST /api/cart/add→ Thêm vào giỏ hàngDELETE /api/cart/remove/{itemId}→ Xóa khỏi giỏ hàng
POST /api/orders→ Tạo đơn hàngGET /api/orders/{userId}→ Xem đơn hàng của người dùngPUT /api/orders/{id}/status→ (Admin) Cập nhật trạng thái đơn hàng
GET /api/coupons/{code}→ Lấy thông tin mã giảm giá
- Lắng nghe sự kiện từ
OrderAPIđể cộng điểm thưởng.
- Lắng nghe sự kiện từ
OrderAPIđể gửi email xác nhận.
sequenceDiagram
participant U as User
participant G as API Gateway
participant C as CartAPI
participant O as OrderAPI
participant R as RewardAPI
participant E as EmailAPI
participant B as Message Bus
U->>G: Yêu cầu tạo Order
G->>O: Forward request
O->>O: Lưu Order DB
O->>B: Publish sự kiện "OrderCreated"
B->>R: Notify RewardAPI
R->>R: Cộng điểm thưởng
B->>E: Notify EmailAPI
E->>E: Gửi email xác nhận
O->>G: Trả về kết quả Order
G->>U: Hiển thị thông tin đơn hàng
Dự án Cherry minh họa đầy đủ cách triển khai một hệ thống thương mại điện tử theo kiến trúc microservices với .NET 8. Nó có khả năng mở rộng, dễ bảo trì, tận dụng message bus cho giao tiếp bất đồng bộ, và cung cấp các chức năng thiết yếu cho cả khách hàng và quản trị viên. Đây là một ví dụ điển hình cho các đồ án hoặc dự án thực tế về E-Commerce Microservices.