#P1732
POST /v2/comments
Create Comment
این اندپوینت برای ثبت یک نظر جدید در سیستم طراحی شده است. فرآیند ارسال داده به این اندپوینت به دلیل ملاحظات امنیتی، پیچیدگی خاصی دارد.
دادههای اصلی نظر ابتدا باید به صورت یک آبجکت JSON ساخته شده، سپس با استفاده از کلید عمومی (Public Key) مربوط به هر شعبه رمزنگاری (Encrypt) شوند و در نهایت به صورت Base64 در یک فیلد به نام data به سرور ارسال گردند.
Request Flow and Encryption
- ساخت آبجکت JSON: ابتدا اطلاعات نظر را در قالب یک آبجکت JSON استاندارد آماده کنید (ساختار آن در جدول زیر آمده است).
- رمزنگاری (Encryption): رشته JSON حاصل را با استفاده از کلید عمومی RSA که مختص
branchمورد نظر است، رمزنگاری کنید. - کدگذاری Base64: خروجی باینری حاصل از مرحله رمزنگاری را به فرمت رشته Base64 تبدیل کنید.
- ارسال درخواست: یک درخواست
POSTبه این اندپوینت ارسال کنید که بدنه آن فقط شامل یک فیلدdataحاوی رشته Base64 نهایی است. - پردازش در سرور: میدلور
decryptDataدر سمت سرور با استفاده از کلید خصوصی (Private Key) متناظر، دادهها را رمزگشایی کرده و در اختیار کنترلر قرار میدهد.
Create a New Comment
URL:
/v2/commentsMethod: POST
Controller: CommentController@store
Middleware Chain: `authWithJwt`, `decryptData`
Request Body Structure (Before Encryption)
آبجکت JSON که باید رمزنگاری و ارسال شود، باید شامل فیلدهای زیر باشد:
| Parameter | Type | Description | Validation |
|---|---|---|---|
| content_id | integer | شناسه محتوایی که نظر برای آن است (مثلاً شناسه مقاله). | Required |
| category | string | نوع محتوا (مثلاً 'article', 'accommodation'). | Required |
| content | string | متن اصلی نظر. | Required |
| name | string | نام نویسنده نظر. | Required |
| string | ایمیل نویسنده نظر. | Required, Email Format | |
| phone | string | شماره تلفن نویسنده نظر. | Optional |
| status | integer | وضعیت اولیه نظر (مثلاً 0 برای "در انتظار تایید"). | Required |
| reply_to | integer | اگر این نظر پاسخی به نظر دیگری است، شناسه نظر والد در اینجا قرار میگیرد. در غیر این صورت null یا حذف شود. | Optional, Nullable |
اعتبارسنجی: تمام فیلدهای ورودی توسط
StoreCommentRequest اعتبارسنجی میشوند. در صورت ارسال داده نامعتبر، خطای 422 بازگردانده خواهد شد.Request Examples
مرحله ۱: ساختار JSON خام (قبل از رمزنگاری)
{
"content_id": 152,
"category": "article",
"content": "این یک تست برای ثبت کامنت است.",
"name": "کاربر تست",
"email": "test@example.com",
"phone": "09120000000",
"status": 0,
"reply_to": null
}
مرحله ۲: بدنه نهایی درخواست (بعد از رمزنگاری و Base64)
{
"data": "eyB...[Encrypted & Base64 Encoded String]...SIn0="
}
Server-Side Logic
پس از رمزگشایی موفق، کنترلر به صورت خودکار اطلاعات زیر را به دادههای دریافتی اضافه کرده و در دیتابیس ذخیره میکند:
operator_id: شناسه اپراتور لاگین کرده (در صورت وجود).branch: شناسه شعبه اپراتور.ip_address: آدرس IP درخواستدهنده.
Success Response
در صورت موفقیت، سرور یک پاسخ با کد 200 و حاوی آبجکت نظر جدید که از طریق CommentResource فرمتدهی شده، برمیگرداند.
{
"status": true,
"time": 1715000000,
"data": {
"id": 11,
"operatorId": 5,
"contentId": 152,
"category": "article",
"branch": 1,
"commentText": "این یک تست برای ثبت کامنت است.",
"status": "pending",
"isFlagged": false,
"replyTo": null,
"createdAt": "2024-10-23T10:00:00.000000Z",
"updatedAt": "2024-10-23T10:00:00.000000Z"
}
}