ReviewBình luận sản phẩm

Tạo bình luận sản phẩm

Tạo bình luận mới cho sản phẩm

Endpoint

POST /site/productcomments/{product_id}

Headers

KeyValueBắt buộcMô tả
SiteTenantId{tenant_id}CóID của công ty/tenant.
SiteAuthorization{jwt_token}KhôngToken khách hàng. Nếu có, bình luận được gắn với khách hàng đang đăng nhập.

Workflow & Logic

API này cho phép người dùng (có thể không đăng nhập) tạo bình luận mới cho sản phẩm.

Quy trình xử lý (Internal Processing)

  1. Khởi tạo & Kiểm tra (Initialization & Validation):

    • Khởi tạo site context từ header SiteTenantId (không yêu cầu đăng nhập).
    • Kiểm tra sản phẩm (theo product_id trên URL) có tồn tại và thuộc về shop của SiteTenantId.
  2. Kiểm tra tính hợp lệ (Validation):

    • Họ tên (fullname): Bắt buộc, không được để trống.
    • Số điện thoại (phone): Bắt buộc, không được để trống.
    • Nội dung (content): Bắt buộc, không được để trống.
    • Email (email): Tùy chọn.
    • Sản phẩm (product_id trong body): Tùy chọn; nếu gửi thì phải trùng với product_id trên URL.
    • Biến thể sản phẩm (product_variant_id): Nếu có, phải tồn tại và thuộc đúng sản phẩm đang bình luận.
    • File đính kèm (file_id_list): Nếu có, phải là mảng ID file thuộc shop và do chính người bình luận tải lên (khách đã đăng nhập: file tải lên khi đang đăng nhập bằng tài khoản đó; khách vãng lai: file tải lên khi chưa đăng nhập).
  3. Tạo bình luận:

    • Tạo mới ProductComment với trạng thái STATUS_WAIT_FOR_MODERATE (chờ duyệt).
    • Gán employee_reply_status = EMPLOYEE_REPLY_STATUS_WAITING (đang chờ phản hồi từ nhân viên).
    • Lưu địa chỉ IP của người dùng.
    • customer_id được lấy từ token SiteAuthorization (nếu có); giá trị customer_id gửi trong body sẽ bị bỏ qua.
  4. Kết quả:

    • Nếu thành công: Trả về đối tượng ProductComment vừa tạo (HTTP 201).
    • Nếu lỗi validation: Trả về danh sách lỗi (HTTP 422).

Parameters

TênKiểuBắt buộcMô tả
product_idintegerCóID sản phẩm (trong URL path).

Request Body

{
  "product_id": 10,
  "product_variant_id": 5,
  "fullname": "Nguyễn Văn A",
  "phone": "0901234567",
  "email": "khachhang@example.com",
  "content": "Sản phẩm này có chất lượng tốt không?",
  "file_id_list": [101, 102]
}

Request Body Schema

Tên trườngKiểuBắt buộcMô tả
product_idintegerKhôngID sản phẩm (nếu gửi, phải khớp với URL path).
product_variant_idintegerKhôngID biến thể sản phẩm.
fullnamestringCóHọ tên người bình luận.
phonestringCóSố điện thoại.
emailstringKhôngEmail.
contentstringCóNội dung bình luận.
file_id_listarrayKhôngDanh sách ID file đính kèm (file của shop, do chính người bình luận tải lên).

Response Schema

HTTP 201 - Created

Trả về đối tượng Product Comment Object vừa tạo.

{
  "id": 1,
  "product_id": 10,
  "fullname": "Nguyễn Văn A",
  "phone": "0901234567",
  "email": "khachhang@example.com",
  "content": "Sản phẩm này có chất lượng tốt không?",
  "status": 1,
  "employee_reply_status": 1,
  "date_created": 1600000000
  // ... Xem thêm Product Comment Object Schema
}

HTTP 422 - Validation Error

Mã lỗiMô tả
error_fullname_requiredHọ tên không được để trống.
error_phone_requiredSố điện thoại không được để trống.
error_content_requiredNội dung bình luận không được để trống.
error_product_not_existproduct_id trong body không khớp với sản phẩm trên URL.
error_product_variant_not_existBiến thể sản phẩm không tồn tại hoặc không thuộc sản phẩm đang bình luận.
error_file_id_list_invalidfile_id_list không phải mảng.
error_file_not_found(ID: {file_id})File không tồn tại, không thuộc shop hoặc không do người bình luận tải lên.

HTTP 422 - Permission Error

Nếu sản phẩm không tồn tại hoặc không thuộc về shop (error_not_permission).

HTTP 500

Mã lỗiMô tả
error_addLỗi khi lưu bình luận.

On this page