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
| Key | Value | Bắt buộc | Mô tả |
|---|---|---|---|
SiteTenantId | {tenant_id} | Có | ID của công ty/tenant. |
SiteAuthorization | {jwt_token} | Không | Token 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)
-
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_idtrên URL) có tồn tại và thuộc về shop củaSiteTenantId.
- Khởi tạo site context từ header
-
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_idtrong body): Tùy chọn; nếu gửi thì phải trùng vớiproduct_idtrê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).
- Họ tên (
-
Tạo bình luận:
- Tạo mới
ProductCommentvới trạng tháiSTATUS_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ừ tokenSiteAuthorization(nếu có); giá trịcustomer_idgửi trong body sẽ bị bỏ qua.
- Tạo mới
-
Kết quả:
- Nếu thành công: Trả về đối tượng
ProductCommentvừa tạo (HTTP 201). - Nếu lỗi validation: Trả về danh sách lỗi (HTTP 422).
- Nếu thành công: Trả về đối tượng
Parameters
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
product_id | integer | Có | 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ường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
product_id | integer | Không | ID sản phẩm (nếu gửi, phải khớp với URL path). |
product_variant_id | integer | Không | ID biến thể sản phẩm. |
fullname | string | Có | Họ tên người bình luận. |
phone | string | Có | Số điện thoại. |
email | string | Không | Email. |
content | string | Có | Nội dung bình luận. |
file_id_list | array | Không | Danh 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ỗi | Mô tả |
|---|---|
error_fullname_required | Họ tên không được để trống. |
error_phone_required | Số điện thoại không được để trống. |
error_content_required | Nội dung bình luận không được để trống. |
error_product_not_exist | product_id trong body không khớp với sản phẩm trên URL. |
error_product_variant_not_exist | Biế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_invalid | file_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ỗi | Mô tả |
|---|---|
error_add | Lỗi khi lưu bình luận. |