Categories
Đào sâu tính năng. Định danh dịch vụ nằm trong Tổng quan Commerce; bảng trường category trong Domain Model §3.9.
Categories tổ chức sản phẩm thành phân cấp. Chúng có hai loại: category SYSTEM (chỉ đọc, dùng chung giữa các merchant cùng business type) và category tùy biến (do merchant sở hữu, sửa được hoàn toàn).
REST Endpoints
Tham khảo đầy đủ: OpenAPI trực tiếp tại
/v1/api/commerce/doc/openapi.json. CRUD chuẩn quaControllerFactory; base path/categories.
Không có route tùy biến (không /categories/tree, không /categories/{id}/move, không /categories/{id}/breadcrumb). Không có CategoryService — controller xử lý toàn bộ logic tùy biến trực tiếp.
Loại Category
| Loại | merchantId | Sửa được | Hiển thị với |
|---|---|---|---|
SYSTEM | null | Không (403 khi update/delete) | Merchant khớp businessType của category |
| Tùy biến | Merchant ID | Có | Chỉ merchant đó |
Vai trò Category (Category.type)
Category.type (CategoryTypes: REGULAR / COMBO / ADDON / FBT) là nhãn nhóm FE thuần túy — nó không phải bộ phân biệt tồn kho. Không có gì trong đường tồn kho hay bán rẽ nhánh theo nó.
Quyết định cấu trúc "đây có phải combo ảo không?" nằm trên ProductVariant.type (ProductVariantTypes.COMBO, bên cạnh KIT). Các quan hệ COMBO / ADDON / FBT nằm trong bảng ProductBundler đơn (ProductBundler.type). Xem ADR-0003 và ADR nổ combo cross-package.
Vì
Category.typekhông còn điều khiển hành vi, đổi type một category hoặc di chuyển một Product giữa các category là an toàn — nó không thể lật một variant giữa vật lý và ảo.
Truy cập theo phạm vi merchant
Với người dùng không phải admin, find() yêu cầu một merchantId trong filter. Controller sau đó trả về hợp của:
- Category SYSTEM nơi
businessTypekhớpbusinessTypecủa merchant - Category tùy biến nơi
merchantIdkhớp
Bảo vệ Category SYSTEM
updateById()chặn cập nhật category nơitype === 'SYSTEM'→ HTTP 403deleteById()chặn xóa category SYSTEM → HTTP 403
Chính sách xóa
Xóa category đi qua DeletionPolicyService.deleteCategoryById():
strictCategoryDeletion của Merchant | Category có sản phẩm | Hành vi |
|---|---|---|
true (mặc định) | Có | HTTP 409 — không thể xóa |
true | Không | Cho phép xóa |
false | Có | categoryId của sản phẩm đặt thành null, rồi xóa category |
false | Không | Cho phép xóa |
Chính sách xóa được cấu hình theo từng merchant qua PUT /merchants/{id}/deletion-policy.
Trang liên quan
| Trang | Mô tả |
|---|---|
| Tổng quan Commerce | Định danh dịch vụ + catalog |
| Domain Model | Bảng trường Category |
| Products | Danh mục sản phẩm |
| ADR-0003 | Vì sao Category.type chỉ để nhóm |