Skip to main content
#P1814

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

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

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


Endpoint Information

URL: /b2c/v1/articles/{id}/views
Method: POST
Controller: V1ArticleController@incrementViews
Middleware: web (بدون JWT)
Model: Article
Action: افزایش مقدار views در ستون پایگاه داده

پارامترهای مسیر (Path Parameter)

نام نوع الزامی توضیح
id integer شناسه عددی مقاله که می‌خواهیم بازدید آن را افزایش دهیم

بدنه درخواست (Request Body)

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

خروجی موفق (Success Response)

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

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

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

فلوچارت منطق عملکرد (Flowchart)

📥 ۱. دریافت شناسه {id} از مسیر درخواست
🔍 ۲. اجرای Article::findOrFail($id)
در صورت نبود مقاله ⇒ خطای ۴۰۴ با پیام ModelNotFoundException برگردانده می‌شود.
➕ ۳. فراخوانی متد $article->increment('views')
مقدار ستون views در پایگاه داده یک واحد افزایش می‌یابد.
✅ ۴. پاسخ JSON شامل وضعیت، زمان (timestamp) و مقدار جدید views برگردانده می‌شود.

نکات فنی برای توسعه‌دهنده (Developer Notes)

  • از تابع Eloquent increment() برای جلوگیری از race condition در محیط‌های هم‌زمان (concurrent) استفاده شده است.
  • در صورت نیاز به جلوگیری از افزایش تکراری در همان session، توصیه می‌شود کنترل فرانت‌اند (یا cookie flag) اضافه شود.
  • فیلد views باید از نوع unsignedBigInteger باشد تا در بازدید بالا overflow نکند.
  • بهتر است عملیات آماری (views امروز، بازدید یکتا و …) در آینده با Redis counter یا جدول جداگانه مدیریت شود.