Trong bài trước chúng ta đã cùng nhau khởi tạo giao diện trang chủ, trong bài này chúng ta sẽ cùng nhau tìm hiểu một số lớp có sẵn của E-Commerce mà dự án book-store sẽ sử dụng nhé.

Mục tiêu

Giúp bạn biết đến một số lớp có sẵn của E-Commerce

Một số lớp

E-Commerce là một plugin cực kỳ lớn với rất nhiều các nghiệp vụ liên quan đến quản lý sản, quản lý đơn hàng, quản lý giá cả, tiền tệ, khuyến mãi, tiếp thị liên kết, kho bãi, vận chuyển, ... Thật khó để tìm hiểu hết trong 1 lúc, vậy nên chúng ta sẽ tìm hiểu các lớp tiêu biểu thôi nhé.

Các lớp dạng service

Các lớp dạng này cung cấp dữ liệu ở dạng model, nó chứa nhiều thông tin, có thể có thông tin nhạy cảm nên bạn không nên trả dữ liệu do các lớp service tạo ra qua API nhưng set vào view thì được.

WebProductService

Lớp này sẽ cung cấp cho chúng ta các hàm liên quan đến sản phẩm, ví dụ:

  • getProductsByIds: Hàm này để lấy một danh sách sản phẩm theo danh sách id truyền vào.
  • getProductByIdAndStatus: Hàm này để lấy một sản phẩm theo mã và trạng thái.
WebProductCategoryService

Lớp này sẽ cung cấp cho chúng ta các hàm liên quan đến danh mục sản phẩm ví dụ:

  • getCategoryByName: Hàm này để lấy danh mục theo tên.
WebProductCategoryProductService

Lớp này sẽ cung cấp cho chúng ta các hàm liên quan đến sản phẩm nằm trong danh mục, ví dụ:

  • getProductCategoryProductsByCategory: Hàm này để lấy các sản phẩm nằm trong danh mục theo thứ tự và id giảm dần.
WebProductBookService

Lớp này sẽ cung cấp cho chúng ta các hàm liên quan đến sách, ví dụ:

  • getProductBookById: Lấy thông tin một cuốn sách theo mã sản phẩm.
WebProductDescriptionService

Lớp này sẽ cung cấp cho chúng ta các hàm liên quan đến mô tả sản phẩm, ví dụ:

  • getProductDescriptionPostIdMapByIds: Để lấy một map ánh xạ giữa mã sản phẩm và mô tả sản phẩm.
  • getProductDescriptionPostIdById: Để lấy mô tả sản phẩm theo mã sản phẩm.
WebProductPriceService

Lớp này sẽ cung cấp cho chúng ta các hàm liên quan đến sản phẩm, ví dụ:

  • getProductPriceMap: Lấy một map ánh xạ giữa mã sản phẩm và giá sản phẩm.
  • getProductPrice: Lấy giá của sản phẩm.

Các lớp dạng phân trang

Các lớp dạng này để lấy nhiều dữ liệu ở dạng phân trang và thường được gọi theo mẫu kiểu này:

PaginationModel<ProductModel> pagination =
    getPaginationModelBySortOrder(
        paginationProductService,
        productPaginationParameterConverter,
        filter,
        sortOrder,
        nextPageToken,
        prevPageToken,
        lastPage,
        limit
    );

Bạn sẽ thường kết hợp với một decorator để có đẩy đủ dữ liệu trả cho client:

return bookModelDecorator.decorateToBookPaginationResponse(
    pagination,
    currency
);
PaginationProductService

Lớp này cung cấp cho chúng ta các hàm phân trang sản phẩm.

PaginationProductPriceService

Lớp này cung cấp cho chúng ta các hàm phân trang sản phẩm theo giá.

Các lớp dạng controller service

Các lớp dạng này cung cấp dữ liệu ở dạng response đã loại bỏ các thông tin nhạy cảm và bạn có thể trả qua API thoải mái.

WebProductCategoryControllerService

Lớp này cung cấp cho chúng ta các hàm liên quan đến danh mục sản phẩm, tuy nhiên nó chỉ có cho web, ví dụ:

  • getProductCategoryMenusByTypeAndStatuses: Hàm này lấy menu các danh mục sản phẩm theo loại sản phẩm và trạng thái.

Các lớp dạng view controller

Các lớp dạng này cung cấp sẵn các API ở dạng view, tức là kết quả trả về cho người dùng sẽ là một trang HTML hoàn chỉnh. Bạn sẽ cần thừa kế các lớp này ở web plugin hoặc theme của mình ví dụ:

@Controller
public class WebBookStoreOrderController extends WebOrderController {}
WebCommissionController

Lớp này cung cấp các trang:

  • /commission: Thông tin tiênhoa hồng của tài khoản hiện tại đang đăng nhập.
  • /account/commission: Giống hệt trang /commission.
WebOrderController

Lớp này cung cấp các trang:

  • /orders: Hiển thị danh sách các đơn hàng của tài khoản hiện tại đang đăng nhập.
  • /account/orders: Giống hệt trang /order.
  • /orders/{id}: Hiển thị chi tiết đơn hàng của tài khoản đang đăng nhập.
  • /account/orders/{id}: Giống hệt trang /orders/{id}.
  • /orders/{id}/payment-error: Hiển thị thông tin thanh toán đơn hàng lỗi của tài khoản đang được đăng nhập.
  • /account/orders/{id}/payment-error: Giống hệt /orders/{id}/payment-error.
WebCheckoutController

Lớp này cung cấp các trang:

  • /checkout/shopping-cart: Hiển thị thông tin giỏ hàng.

Các lớp dạng API

Các lớp dạng này sẽ trả về cho client dữ liệu dạng khác một trang HTML, chủ yếu sẽ trả về json hoặc text. Bên trong nó chỉ định nghĩa ra endpoint chứ chưa chỉ định phiên bản của API, bạn sẽ phải thừa kế các lớp API có sẵn kiểu thế này:

@Api
@Authenticated
@Controller("/api/v1")
public class WebBookStoreApiCheckoutController extends WebApiCheckoutController {}

Thì các API sẽ được bổ sung tiền tố /api/v1 vào đầu, ví dụ /api/v1/checkout. Nếu API nào cần người dùng đăng nhập mới được sử dụng bạn có thể bổ sung @Authenticated annotation.

WebApiCheckoutController

Lớp này chứa sẵn các hàm xử lý API enpoint:

  • /checkout: Đăng ký các sản phẩm mới vào giỏ hàng.
  • /checkout/shopping-cart/qr-codes: Lấy danh sách các QR code để thanh toán giỏ hàng ánh xạ với mã tài khoản ngân hàng.
  • /checkout/orders/{id}/qr-codes: Lấy danh sách các QR code để thanh toán đơn hàng ánh xạ với mã tài khoản ngân hàng.
  • /checkout/shopping-carts/{shoppingCartId}/products/{productId}: Xoá sản phẩm khỏi giỏ hàng với mã giỏ hàng và mã sản phẩm.
  • /checkout/shopping-cart-products/{id}: Xoá sản phẩm khỏi giỏ hàng với mã sản phẩm giỏ hàng.
WebApiCountryController

Lớp này cung cấp các API endpoint lấy thông tin quốc gia và địa giới hành chính. Ví dụ:

/countries: Để lấy danh sách các quốc gia./countries/{countryId}/provinces: Để lấy danh sách các tỉnh thành phố trong một quốc gia./countries/{countryId}/province-and-children-list: Để lấy danh sách các tỉnh thành phố, quận, huyện xã có trong 1 quốc gia. API này tương đối nặng nề./provinces/{provinceId}/districts: Để lấy danh sách các quận huyện trong một tỉnh thành phố./districts/{districtId}/wards: Để lấy danh sách các xã, phường trong một quận, huyện hoặc tỉnh, thành phố./countries/search: Tìm kiếm quốc gia theo từ khoá./provinces/search: Tìm kiếm tỉnh, thành phố theo từ khoá./districts/search: Tìm kiếm quận, huyện theo từ khoá./wards/search: Tìm kiếm xã phường theo từ khoá.WebApiDeliveryController

Lớp này cung cấp các API endpoint lấy thông tin vận đơn. Ví dụ:

/delivery/min-fee: Lấy phí vận chuyển thấp nhất./delivery-orders/{id}/histories: Lấy lịch sử vận đơn.WebApiOrderController

Lớp này cung cấp các API endpoint liên quan đến đơn hàng. Vi dụ:

/orders: Lấy phân trang đơn hàng./orders/create: Tạo đơn hàng./orders/create-waiting-to-confirm: Tạo và yêu cầu xác nhận đơn hàng./orders/{id}/waiting-to-confirm: Yêu cầu xác nhận đơn hàng./orders/{id}/waiting-to-confirm-in-duration: Đợi xác nhận đơn hàng trong 1 khoảng thời gian./orders/create-payment-url: Tạo đường dẫn thanh toán đơn hàng./orders/{id}: Lấy thông tin đơn hàng theo id./orders/{id}/status: Lấy trạng thái đơn hàng theo id.WebApiProductCurrencyController

Lớp này cung cấp các API endpoint liên quan đến tiền tệ, Ví dụ:

/currencies/default: Lấy loại tiền tệ mặc định./currencies/{id}/format-amount: Định dạng số tiền theo loại tiền tệ.WebApiProductPriceController

Lớp này cung cấp các API endpoint liên quan đến giá sản phẩm. Ví dụ:

/products/min-published-price: Lấy giá thấp nhất của sản phẩm hiện đang được xuất bản./products/max-published-price: Lấy giá cao nhất của sản phẩm hiện đang được xuất bản./products/{productId}/size-color-price: Lấy giá của sản phẩm theo màu sắc, kích thước, chất liệu.WebApiShopBranchController

Lớp này cung cấp các API endpoint liên quan đến chi nhánh cửa hàng. Ví dụ:

  • /shop-branch-addresses: Lấy các địa chỉ các các chi nhánh theo id.
WebApiShoppingCartController

Lớp này cung cấp các API endpoint liên quan đến giỏ hàng. Ví dụ:

  • /shopping-cart: Lấy thông tin giỏ hàng hiện tại.
  • /shopping-cart/product-count: Lấy số lượng sản phẩm đang có trong giỏ hàng.
WebApiVoucherController

Lớp này cung cấp các API endpoint liên quan đến phiếu giảm giá. Ví dụ:

  • /user-vouchers: Lấy danh sách các voucher của người dung theo phân trang.
  • /user-vouchers/{id}/used: Lấy danh sách các voucher đã được sử dụng của người dùng theo phân trang.
  • /vouchers/{code}/discount-amount: Lấy giá được giảm từ mã voucher.

Tài liệu tham khảo