# POST /b2c/v1/articles/{id}/views

## POST /b2c/v1/articles/{id}/views

این اندپوینت برای افزایش شمارش بازدید مقاله استفاده می‌شود. هنگام نمایش جزئیات مقاله در سمت کاربر (مانند صفحه‌ی article detail)، فرانت‌اند می‌تواند پس از بارگذاری موفق مقاله، این متد را برای ثبت بازدید فراخوانی کند. افزایش بازدید مستقیماً در دیتابیس انجام می‌شود و مقدار جدید بازگردانده می‌شود.

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

</div>### Endpoint Information

<div class="api-docs" id="bkmrk-url%3A-%2Fb2c%2Fv1%2Farticle"><div class="endpoint-info"><div>**URL:** `/b2c/v1/articles/{id}/views`</div><div>**Method:** <span class="method-post">POST</span></div><div>**Controller:** `V1ArticleController@incrementViews`</div><div>**Middleware:** `web` (بدون JWT)</div><div>**Model:** `Article`</div><div>**Action:** افزایش مقدار `views` در ستون پایگاه داده</div></div>---

</div>### پارامترهای مسیر (Path Parameter)

<div class="api-docs" id="bkmrk-%D9%86%D8%A7%D9%85-%D9%86%D9%88%D8%B9-%D8%A7%D9%84%D8%B2%D8%A7%D9%85%DB%8C-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD"><table class="schema-table" dir="rtl"><thead><tr><th>نام</th><th>نوع</th><th>الزامی</th><th>توضیح</th></tr></thead><tbody><tr><td>`id`</td><td>integer</td><td>✅</td><td>شناسه عددی مقاله که می‌خواهیم بازدید آن را افزایش دهیم</td></tr></tbody></table>

---

</div>### بدنه درخواست (Request Body)

```json
{}  
// بدون نیاز به بدنه خاص؛ صرفاً فراخوانی ساده POST کافی است.

```

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

</div>### خروجی موفق (Success Response)

```json
{
  "status": true,
  "time": 1733810253,
  "views": 121
}
```

#### در صورت بروز خطا (Error Response)

```json
{
  "message": "No query results for model [App\\Models\\Article] 9999",
  "exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
  "status_code": 404
}
```

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

</div>### فلوچارت منطق عملکرد (Flowchart)

<div class="api-docs" id="bkmrk-%F0%9F%93%A5-%DB%B1.-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D8%B4%D9%86%D8%A7%D8%B3%D9%87-%7Bi"><div class="flowchart" dir="rtl"><div class="flow-item">📥 ۱. دریافت شناسه `{id}` از مسیر درخواست</div><div class="flow-arrow">↓</div><div class="flow-item-process">🔍 ۲. اجرای `Article::findOrFail($id)`  
در صورت نبود مقاله ⇒ خطای ۴۰۴ با پیام ModelNotFoundException برگردانده می‌شود.</div><div class="flow-arrow">↓</div><div class="flow-item-process">➕ ۳. فراخوانی متد `$article->increment('views')`  
مقدار ستون `views` در پایگاه داده یک واحد افزایش می‌یابد.</div><div class="flow-arrow">↓</div><div class="flow-item-success">✅ ۴. پاسخ JSON شامل وضعیت، زمان (timestamp) و مقدار جدید `views` برگردانده می‌شود.</div></div>---

</div>### نکات فنی برای توسعه‌دهنده (Developer Notes)

<div class="api-docs" id="bkmrk-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%A8%D8%B9-eloquent-inc">- از تابع Eloquent `increment()` برای جلوگیری از race condition در محیط‌های هم‌زمان (concurrent) استفاده شده است.
- در صورت نیاز به جلوگیری از افزایش تکراری در همان session، توصیه می‌شود کنترل فرانت‌اند (یا cookie flag) اضافه شود.
- فیلد `views` باید از نوع `unsignedBigInteger` باشد تا در بازدید بالا overflow نکند.
- بهتر است عملیات آماری (views امروز، بازدید یکتا و …) در آینده با Redis counter یا جدول جداگانه مدیریت شود.

</div>