Skip to content

Latest commit

 

History

History
255 lines (200 loc) · 6.4 KB

File metadata and controls

255 lines (200 loc) · 6.4 KB

Cherry Project Report

1. Giới thiệu dự án

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


2. Quy trình nghiệp vụ

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]
Loading

3. Kiến trúc hệ thống

3.1 Sơ đồ tổng quan

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
Loading

3.2 Công nghệ sử dụng

  • 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

4. Các Microservice chính

  1. AuthAPI: Xác thực và phân quyền người dùng.
  2. ProductAPI: CRUD sản phẩm.
  3. OrderAPI: Xử lý đơn hàng, thanh toán.
  4. CouponAPI: Quản lý và áp dụng mã giảm giá.
  5. ShoppingCartAPI: Giỏ hàng người dùng.
  6. RewardAPI: Tính toán và cộng điểm thưởng khi hoàn thành giao dịch.
  7. EmailAPI: Gửi email xác nhận đơn hàng, thông báo khuyến mãi.

5. User Stories

Người dùng cuố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.

Quản trị viên

  • 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.

6. Database Design

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
Loading

7. API Endpoints (ví dụ)

AuthAPI

  • POST /api/auth/register → Đăng ký
  • POST /api/auth/login → Đăng nhập

ProductAPI

  • GET /api/products → Lấy danh sách sản phẩm
  • GET /api/products/{id} → Chi tiết sản phẩm
  • POST /api/products → (Admin) Thêm sản phẩm
  • PUT /api/products/{id} → (Admin) Sửa sản phẩm
  • DELETE /api/products/{id} → (Admin) Xóa sản phẩm

ShoppingCartAPI

  • GET /api/cart/{userId} → Lấy giỏ hàng
  • POST /api/cart/add → Thêm vào giỏ hàng
  • DELETE /api/cart/remove/{itemId} → Xóa khỏi giỏ hàng

OrderAPI

  • POST /api/orders → Tạo đơn hàng
  • GET /api/orders/{userId} → Xem đơn hàng của người dùng
  • PUT /api/orders/{id}/status → (Admin) Cập nhật trạng thái đơn hàng

CouponAPI

  • GET /api/coupons/{code} → Lấy thông tin mã giảm giá

RewardAPI

  • Lắng nghe sự kiện từ OrderAPI để cộng điểm thưởng.

EmailAPI

  • Lắng nghe sự kiện từ OrderAPI để gửi email xác nhận.

8. Sequence Diagram (Luồng đặt hàng)

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
Loading

9. Kết luận

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.