Quản lý nhóm sản phẩmBiến thể sản phẩm

Cập nhật hàng loạt biến thể

Cập nhật danh sách biến thể của một sản phẩm cùng lúc

Endpoint

PUT /v1/productvariants/batch/{product_id}

Quyền: product.manage

Path Parameters

TênKiểuBắt buộcMô tả
product_idintCóID sản phẩm cha của các biến thể

Request Body

Gửi danh sách các biến thể cần cập nhật hoặc thêm mới trong mảng items. Cần truyền kèm thông tin công ty và người thao tác để kiểm tra phân quyền.

TrườngKiểuBắt buộcMô tả
company_idintCóID công ty (dùng để validate và check scope)
creator_idintCóID người thao tác (dùng để kiểm tra quyền)
itemsarrayCóDanh sách đối tượng biến thể (tối đa 200 phần tử)

Cấu trúc item trong mảng items

  • Nếu có id > 0: Hệ thống sẽ tìm và CẬP NHẬT biến thể đó.
  • Nếu không có id (hoặc id=0) và có uuid (dạng new_...): Hệ thống sẽ TẠO MỚI biến thể.
TrườngKiểuBắt buộcMô tả
idintKhôngID biến thể (>0 để cập nhật, 0 hoặc bỏ trống để tạo mới)
uuidstringKhôngUUID biến thể. Với biến thể mới có thể gửi dạng new_..., hệ thống sẽ tự chuẩn hóa.
skustringKhôngMã SKU (sẽ được chuẩn hóa bỏ khoảng trắng)
barcodestringKhôngMã barcode
display_namestringKhôngTên hiển thị của biến thể
notestringKhôngGhi chú nội bộ
priceintKhôngGiá bán chính
compare_priceintKhôngGiá so sánh (giá gốc trước giảm giá)
min_stockintKhôngTồn kho tối thiểu
is_serial_trackedintKhôngTheo dõi serial (1: Có, 0: Không)
lengthintKhôngChiều dài
widthintKhôngChiều rộng
heightintKhôngChiều cao
weightintKhôngTrọng lượng
external_idstringKhôngID liên kết bên ngoài
price_by_uomarrayKhôngGiá theo đơn vị tính
combo_dataarrayKhôngDữ liệu combo (nếu là sản phẩm combo)
bomarrayKhôngBill of materials
display_orderintKhôngThứ tự hiển thị (thường do UI sinh ra tự động)
option_valuesarrayKhôngDanh sách giá trị tùy chọn (option_id, option_value_id, option_value_name, uuid). Hệ thống kiểm tra từng giá trị; nếu option_value_name khác tên của option_value_id hoặc chưa có ID, hệ thống tìm giá trị cùng tên trong tùy chọn hoặc tự tạo mới. Chỉ được lưu khi có quyền product.managecontent
photo_gallery_file_id_listarrayKhôngDanh sách file ID ảnh gallery cho biến thể (chỉ được lưu khi có quyền product.managecontent)
is_bom_kitintKhôngLà BOM kit (chỉ áp dụng khi TẠO MỚI, không đổi được với biến thể đã tồn tại)

Lưu ý

Mọi biến thể gửi qua API này đều được gán trạng thái 3 (Active) và thuộc sản phẩm product_id trên đường dẫn; trường status, company_id, product_id trong từng item bị bỏ qua.

Ví dụ Request Body

Ví dụ payload khi cập nhật nhiều biến thể của cùng một sản phẩm:

{
  "company_id": 10311,
  "creator_id": 1,
  "items": [
    {
      "id": 2206,
      "uuid": "89d2a505-3034-4d67-a307-2e89e4ccc4a6",
      "sku": "8938502234534",
      "option_values": [
        {
          "option_id": 8,
          "option_value_id": 4,
          "option_value_name": "Đen",
          "uuid": "4abdd739-a132-49bd-9ed8-341ae6d48bbc"
        },
        {
          "option_id": 9,
          "option_value_id": 14,
          "option_value_name": "L",
          "uuid": "7d66253a-9c87-43f2-996b-712e015aa992"
        }
      ],
      "external_id": "",
      "price": 199000,
      "price_by_uom": [],
      "photo_gallery_file_id_list": [4598],
      "display_order": 1001,
      "barcode": "",
      "display_name": "",
      "note": "",
      "compare_price": 0,
      "min_stock": 0,
      "is_serial_tracked": 0,
      "length": 0,
      "width": 0,
      "height": 0,
      "weight": 0
    },
    {
      "id": 2208,
      "uuid": "85eefaf7-07bd-48ea-8c42-e58c2cb60bae",
      "sku": "8938502234535",
      "option_values": [
        {
          "option_id": 8,
          "option_value_id": 86,
          "option_value_name": "Đen",
          "uuid": "25c3915c-ed69-4c6d-a1df-88b171ebb516"
        },
        {
          "option_id": 9,
          "option_value_id": 84,
          "option_value_name": "S",
          "uuid": "0dc0a878-f6fe-4157-a119-0916234daa5c"
        }
      ],
      "external_id": "",
      "price": 199000,
      "price_by_uom": [],
      "photo_gallery_file_id_list": [4599],
      "display_order": 1002,
      "barcode": "",
      "display_name": "",
      "note": "",
      "compare_price": 0,
      "min_stock": 0,
      "is_serial_tracked": 0,
      "length": 0,
      "width": 0,
      "height": 0,
      "weight": 0
    }
  ]
}

Response Schema

HTTP 200 - OK

Trả về danh sách các biến thể đã được xử lý (bao gồm các ID mới được tạo).

{
    "currentpage": 1,
    "limit": 200,
    "total": 2,
    "items": [
        { "id": 1001, ... },
        { "id": 1005, ... }
    ]
}

Error Codes

Lỗi dữ liệu (HTTP 422) trả về dạng mảng trong trường error. Các item được xử lý lần lượt: nếu một item lỗi, các item hợp lệ khác vẫn có thể đã được lưu, nhưng response trả về HTTP 422 kèm danh sách lỗi.

Mã lỗiMô tả
error_items_property_is_requiredThuộc tính items phải là mảng
error_items_count_max_200Số lượng items vượt quá 200
error_product_variant_not_found_in_batch(ID #X)Không tìm thấy biến thể với ID đã gửi (khi cập nhật)
error_product_variant_update_fail(ID #X)Cập nhật biến thể thất bại
error_product_variant_add_fail(ID #UUID)Thêm mới biến thể thất bại
error_option_value_id_invalid(ID #X, inside Option ID #Y)ID giá trị tùy chọn không hợp lệ
error_option_value_created(Name #X, inside Option ID #Y)Không thể tạo giá trị tùy chọn mới
error_company_id_requiredID công ty không được để trống
error_company_id_notfoundID công ty không tìm thấy
error_user1_id_requiredID người tạo không được để trống
error_user_id_notfoundID người tạo không tìm thấy
error_not_foundSản phẩm không tồn tại hoặc không thuộc công ty của bạn (HTTP 404)
error_role_not_availableKhông có quyền product.manage (HTTP 403)

On this page