# POST /v2/comments

# Create Comment

این اندپوینت برای ثبت یک نظر جدید در سیستم طراحی شده است. فرآیند ارسال داده به این اندپوینت به دلیل ملاحظات امنیتی، پیچیدگی خاصی دارد.   
داده‌های اصلی نظر ابتدا باید به صورت یک آبجکت JSON ساخته شده، سپس با استفاده از **کلید عمومی (Public Key)** مربوط به هر شعبه رمزنگاری (Encrypt) شوند و در نهایت به صورت Base64 در یک فیلد به نام `data` به سرور ارسال گردند.

<div class="api-docs" id="bkmrk-">  ---

</div>## Request Flow and Encryption

<div class="api-docs" id="bkmrk-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%A2%D8%A8%D8%AC%DA%A9%D8%AA-json%3A-%D8%A7%D8%A8%D8%AA"><div class="flowchart" dir="rtl">1. **ساخت آبجکت JSON:** ابتدا اطلاعات نظر را در قالب یک آبجکت JSON استاندارد آماده کنید (ساختار آن در جدول زیر آمده است).
2. **رمزنگاری (Encryption):** رشته JSON حاصل را با استفاده از **کلید عمومی RSA** که مختص `branch` مورد نظر است، رمزنگاری کنید.
3. **کدگذاری Base64:** خروجی باینری حاصل از مرحله رمزنگاری را به فرمت رشته Base64 تبدیل کنید.
4. **ارسال درخواست:** یک درخواست `POST` به این اندپوینت ارسال کنید که بدنه آن فقط شامل یک فیلد `data` حاوی رشته Base64 نهایی است.
5. **پردازش در سرور:** میدلور `decryptData` در سمت سرور با استفاده از **کلید خصوصی (Private Key)** متناظر، داده‌ها را رمزگشایی کرده و در اختیار کنترلر قرار می‌دهد.

</div>  ---

</div>## Create a New Comment

<div class="api-docs" id="bkmrk-url%3A-%2Fv2%2Fcomments-me"><div class="endpoint-info"><div>**URL:** `/v2/comments`</div><div>**Method:** <span class="method-post">POST</span></div><div>**Controller:** CommentController@store</div><div>**Middleware Chain:** `authWithJwt`, `decryptData`</div></div></div>### Request Body Structure (Before Encryption)

آبجکت JSON که باید رمزنگاری و ارسال شود، باید شامل فیلدهای زیر باشد:

<div class="api-docs" id="bkmrk-parameter-type-descr"><table class="schema-table" dir="rtl"><thead><tr><th>Parameter</th><th>Type</th><th>Description</th><th>Validation</th></tr></thead><tbody><tr><td>content\_id</td><td>integer</td><td>شناسه محتوایی که نظر برای آن است (مثلاً شناسه مقاله).</td><td>Required</td></tr><tr><td>category</td><td>string</td><td>نوع محتوا (مثلاً 'article', 'accommodation').</td><td>Required</td></tr><tr><td>content</td><td>string</td><td>متن اصلی نظر.</td><td>Required</td></tr><tr><td>name</td><td>string</td><td>نام نویسنده نظر.</td><td>Required</td></tr><tr><td>email</td><td>string</td><td>ایمیل نویسنده نظر.</td><td>Required, Email Format</td></tr><tr><td>phone</td><td>string</td><td>شماره تلفن نویسنده نظر.</td><td>Optional</td></tr><tr><td>status</td><td>integer</td><td>وضعیت اولیه نظر (مثلاً 0 برای "در انتظار تایید").</td><td>Required</td></tr><tr><td>reply\_to</td><td>integer</td><td>اگر این نظر پاسخی به نظر دیگری است، شناسه نظر والد در اینجا قرار می‌گیرد. در غیر این صورت null یا حذف شود.</td><td>Optional, Nullable</td></tr></tbody></table>

<div class="api-notice warning" dir="rtl">**اعتبارسنجی:** تمام فیلدهای ورودی توسط `StoreCommentRequest` اعتبارسنجی می‌شوند. در صورت ارسال داده نامعتبر، خطای 422 بازگردانده خواهد شد.</div></div>### Request Examples

**مرحله ۱: ساختار JSON خام (قبل از رمزنگاری)**

```json
{
    "content_id": 152,
    "category": "article",
    "content": "این یک تست برای ثبت کامنت است.",
    "name": "کاربر تست",
    "email": "test@example.com",
    "phone": "09120000000",
    "status": 0,
    "reply_to": null
}
```

**مرحله ۲: بدنه نهایی درخواست (بعد از رمزنگاری و Base64)**

```json
{
    "data": "eyB...[Encrypted & Base64 Encoded String]...SIn0="
}
```

### Server-Side Logic

پس از رمزگشایی موفق، کنترلر به صورت خودکار اطلاعات زیر را به داده‌های دریافتی اضافه کرده و در دیتابیس ذخیره می‌کند:

<div class="api-docs" id="bkmrk-operator_id%3A-%D8%B4%D9%86%D8%A7%D8%B3%D9%87-%D8%A7">- `operator_id`: شناسه اپراتور لاگین کرده (در صورت وجود).
- `branch`: شناسه شعبه اپراتور.
- `ip_address`: آدرس IP درخواست‌دهنده.

</div>### Success Response

در صورت موفقیت، سرور یک پاسخ با کد 200 و حاوی آبجکت نظر جدید که از طریق `CommentResource` فرمت‌دهی شده، برمی‌گرداند.

```json
{
    "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"
    }
}
```