From 5c260b98f668f987401e9588280232041b88850b Mon Sep 17 00:00:00 2001 From: Daniel-I-Am Date: Sat, 4 Sep 2021 12:09:42 +0200 Subject: [PATCH] Implement new view count system on blog article --- app/Http/Controllers/BlogArticleController.php | 17 +++++++++++++---- app/Models/BlogArticle.php | 9 ++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/BlogArticleController.php b/app/Http/Controllers/BlogArticleController.php index f425b85..97cd7eb 100644 --- a/app/Http/Controllers/BlogArticleController.php +++ b/app/Http/Controllers/BlogArticleController.php @@ -89,14 +89,23 @@ class BlogArticleController extends Controller * @param \App\Models\BlogArticle $blogArticle * @return \Illuminate\Http\JsonResponse */ - public function show(BlogArticle $blogArticle) + public function show(int $id) { - if (!$this->authService->isAuthenticated() && !$blogArticle->published) { + $blogArticle = BlogArticle::withCount('views')->find($id); + + if ($blogArticle === null) { abort(404); } - $blogArticle->views += 1; - $blogArticle->save(); + if (!$this->authService->isAuthenticated()) { + if (!$blogArticle->published) { + abort(404); + } + + views($blogArticle) + ->cooldown(now()->addHour()) + ->record(); + } return response()->json($blogArticle); } diff --git a/app/Models/BlogArticle.php b/app/Models/BlogArticle.php index c7a8acd..c1330a9 100644 --- a/app/Models/BlogArticle.php +++ b/app/Models/BlogArticle.php @@ -2,12 +2,15 @@ namespace App\Models; +use CyrildeWit\EloquentViewable\Contracts\Viewable; +use CyrildeWit\EloquentViewable\InteractsWithViews; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -class BlogArticle extends Model +class BlogArticle extends Model implements Viewable { use HasFactory; + use InteractsWithViews; protected $fillable = [ 'title', @@ -15,7 +18,6 @@ class BlogArticle extends Model 'date', 'summary', 'content', - 'views', 'published' ]; @@ -24,7 +26,8 @@ class BlogArticle extends Model 'created_at' => 'datetime', 'updated_at' => 'datetime', 'date' => 'datetime', - 'views' => 'integer', 'published' => 'boolean', ]; + + protected $removeViewsOnDelete = true; }