# PUT /v2/comments/{id}

# Update Comment

این اندپوینت برای به‌روزرسانی اطلاعات یک نظر موجود استفاده می‌شود. همانند اندپوینت ایجاد نظر، داده‌های ارسالی برای به‌روزرسانی نیز باید ابتدا رمزنگاری شده و سپس ارسال شوند.   
این متد از قابلیت **Route Model Binding** لاراول استفاده می‌کند. به این معنی که لاراول ابتدا به صورت خودکار مدل `Comment` مربوط به `{id}` ارسالی در URL را پیدا می‌کند و سپس عملیات به‌روزرسانی را روی آن انجام می‌دهد. اگر شناسه نامعتبر باشد، پاسخ 404 بازگردانده می‌شود.

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

</div>## Encryption Flow

فرآیند رمزنگاری و ارسال داده‌ها برای این اندپوینت دقیقاً مشابه اندپوینت [ایجاد نظر (Create Comment)](#store) است. خلاصه‌ی مراحل به شرح زیر است:

<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%AF%D8%A7%D8%AF">1. **ساخت آبجکت JSON:** داده‌های مورد نظر برای آپدیت را در قالب یک آبجکت JSON آماده کنید.
2. **رمزنگاری و Base64:** آبجکت JSON را با **کلید عمومی (Public Key)** شعبه رمزنگاری کرده و به Base64 تبدیل کنید.
3. **ارسال درخواست:** درخواست `PUT` را به همراه بدنه حاوی فیلد `data` (شامل رشته نهایی) ارسال نمایید.

</div><div class="api-docs" id="bkmrk-%D8%AA%D9%88%D8%AC%D9%87%3A-%D9%85%DB%8C%D8%AF%D9%84%D9%88%D8%B1-decrypt"><div class="api-notice info" dir="rtl">**توجه:** میدلور `decryptData` در سمت سرور، با استفاده از **کلید خصوصی (Private Key)**، داده‌ها را رمزگشایی کرده و برای پردازش به کنترلر تحویل می‌دهد.</div>  ---

</div>## Update an Existing Comment

<div class="api-docs" id="bkmrk-url%3A-%2Fv2%2Fcomments%2F%7Bi"><div class="endpoint-info"><div>**URL:** `/v2/comments/{id}`</div><div>**Method:** <span class="method-put">PUT</span></div><div>**Controller:** CommentController@update</div><div>**Middleware Chain:** `authWithJwt`, `decryptData`</div></div></div>### Path Parameters

<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></tr></thead><tbody><tr><td>id</td><td>integer</td><td>شناسه منحصر به فرد نظری که باید به‌روزرسانی شود (Comment ID).</td></tr></tbody></table>

</div>### Request Body Structure (Before Encryption)

آبجکت JSON که باید رمزنگاری و در فیلد `data` ارسال شود، می‌تواند شامل فیلدهای زیر باشد. تمام فیلدها اختیاری هستند و فقط فیلدهایی که قصد تغییر آن‌ها را دارید، ارسال کنید.

<div class="api-docs" id="bkmrk-parameter-type-descr-1"><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</td><td>string</td><td>متن جدید نظر.</td><td>Required</td></tr><tr><td>status</td><td>integer</td><td>وضعیت جدید نظر (مثلاً 1 برای "تایید شده").</td><td>Required, Integer</td></tr><tr><td>flagged</td><td>boolean</td><td>علامت‌گذاری نظر به عنوان "پرچم‌دار". مقدار `true` یا `false`.</td><td>Required, Boolean</td></tr></tbody></table>

<div class="api-notice warning" dir="rtl">**اعتبارسنجی:** فیلدهای ورودی توسط `UpdateCommentRequest` اعتبارسنجی می‌شوند. هر سه فیلد باید در آبجکت JSON وجود داشته باشند.</div></div>### Request Examples

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

```json
{
    "content": "متن ویرایش شده نظر.",
    "status": 1,
    "flagged": false
}
```

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

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

### Success Response

در صورت موفقیت‌آمیز بودن عملیات، یک پاسخ با کد 200 و وضعیت `true` بازگردانده می‌شود. برخلاف متد `store`، در پاسخ این متد، آبجکت داده وجود ندارد.

```json
{
    "status": true,
    "time": 1715000000
}
```

### Error Responses

<div class="api-docs" id="bkmrk-%DA%A9%D8%AF-400-%28bad-request%29">- **کد 400 (Bad Request):** در صورتی که میدلور `decryptData` نتواند داده‌ها را رمزگشایی کند، این خطا به همراه پیام `Decryption failed.` بازگردانده می‌شود.
- **کد 404 (Not Found):** اگر شناسه‌ی `{id}` ارسال شده در URL در دیتابیس موجود نباشد.
- **کد 422 (Unprocessable Entity):** اگر داده‌های رمزگشایی شده از اعتبارسنجی `UpdateCommentRequest` عبور نکنند (مثلاً یکی از فیلدها ارسال نشود).

</div>