# DELETE /v2/comments/{commentId}/{action}

# Remove a Like or Dislike from a Comment

این اندپوینت برای کاهش (حذف) یک لایک یا دیسلایک از یک نظر مشخص استفاده می‌شود. این عملیات، معکوس اندپوینت `POST` برای افزودن لایک/دیسلایک است و به کاربر اجازه می‌دهد تا رأی خود را پس بگیرد.

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

</div>## Decrement Like/Dislike Counter

<div class="api-docs" id="bkmrk-url%3A-%2Fv2%2Fcomments%2F%7Bc"><div class="endpoint-info"><div>**URL:** `/v2/comments/{commentId}/{action}`</div><div>**Method:** <span class="method-delete">DELETE</span></div><div>**Controller:** CommentController@removeLikeOrDislike</div><div>**Middleware:** `authWithJwt`</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>commentId</td><td>integer</td><td>شناسه منحصر به فرد نظری که رأی آن باید حذف شود.</td></tr><tr><td>action</td><td>string</td><td>نوع رأیی که باید حذف شود. این پارامتر باید یکی از دو مقدار زیر باشد: - `like`: برای کاهش شمارنده لایک.
- `dislike`: برای کاهش شمارنده دیسلایک.

</td></tr></tbody></table>

</div>### Request Body

این اندپوینت به هیچ داده‌ای در بدنه درخواست (Request Body) نیاز ندارد.

### فلوچارت منطق سرور (Server Logic Flow)

روند پردازش درخواست در سمت سرور به شرح زیر است:

<div class="api-docs" id="bkmrk-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D9%86%D8%B8%D8%B1-%28find-com">1. **دریافت نظر (Find Comment):** سیستم با استفاده از `commentId` ارسالی در URL، نظر مربوطه را با متد `findOrFail` از دیتابیس جستجو می‌کند. 
    - اگر نظر پیدا نشود، به صورت خودکار پاسخ **404 Not Found** بازگردانده می‌شود.
2. **بررسی نوع عملیات (Check Action):** مقدار پارامتر `action` بررسی می‌شود.
3. **منطق کاهش شمارنده (Conditional Decrement):**
    - **اگر `action` برابر با `like` باشد:** سیستم ابتدا بررسی می‌کند که آیا شمارنده `likes` بزرگتر از صفر است (`$comment->likes > 0`). اگر شرط برقرار باشد، یک واحد از آن کم می‌شود. در غیر این صورت (اگر شمارنده صفر باشد)، هیچ تغییری اعمال نمی‌شود.
    - **اگر `action` برابر با `dislike` باشد:** سیستم بررسی می‌کند که آیا شمارنده `dislikes` بزرگتر از صفر است (`$comment->dislikes > 0`). اگر شرط برقرار باشد، یک واحد از آن کم می‌شود. در غیر این صورت، تغییری اعمال نمی‌شود.
4. **ذخیره تغییرات (Save Changes):** تغییرات روی مدل `Comment` در دیتابیس ذخیره می‌شود (`$comment->save()`).
5. **ارسال پاسخ نهایی (Return Response):** یک پاسخ موفقیت‌آمیز با کد 200 حاوی شمارنده‌های به‌روز شده بازگردانده می‌شود.

<div class="api-notice warning" dir="rtl">**رفتار محافظتی:** این منطق به طور هوشمند از منفی شدن شمارنده‌ها جلوگیری می‌کند. اگر شمارنده یک نظر از قبل صفر باشد و درخواستی برای کاهش آن ارسال شود، مقدار آن تغییری نکرده و همان صفر باقی می‌ماند.</div></div>### Success Response

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

```json
{
    "status": true,
    "time": 1715000000,
    "data": {
        "likes": 24,
        "dislikes": 2
    }
}
```

### Error Response

<div class="api-docs" id="bkmrk-%DA%A9%D8%AF-404-%28not-found%29%3A-">- **کد 404 (Not Found):** در صورتی که `commentId` ارسال شده در URL در دیتابیس موجود نباشد.

</div>