diff --git a/app/Helpers/CacheHelper.php b/app/Helpers/CacheHelper.php index f8ff8c89..3a305c3b 100644 --- a/app/Helpers/CacheHelper.php +++ b/app/Helpers/CacheHelper.php @@ -17,6 +17,7 @@ public static function clearHomePage(?string $course = null): void Cache::forget('home_page_subjects_hsc'); Cache::forget('home_page_subjects_ssc'); Cache::forget('home_page_featured_blogs'); + Cache::forget('home_page_trending_posts'); Cache::forget('home_page_notice'); Cache::forget('forum_filter_subjects'); } diff --git a/app/Http/Controllers/SubjectController.php b/app/Http/Controllers/SubjectController.php index e23715bc..bac72b08 100644 --- a/app/Http/Controllers/SubjectController.php +++ b/app/Http/Controllers/SubjectController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\Blog; +use App\Models\ForumPost; use App\Models\Node; use App\Models\Notice; use App\Models\Subject; @@ -41,6 +42,21 @@ public function index(Request $request, $course) ->toArray(); }); + $trendingPosts = Cache::remember('home_page_trending_posts', now()->addHours(2), function () { + return ForumPost::query() + ->approved() + ->with([ + 'user:id,name,username,image_path,institution,is_verified', + 'subject:id,name,course,slug', + 'node:id,name,slug', + ]) + ->orderByDesc('vote_score') + ->latest() + ->limit(4) + ->get() + ->toArray(); + }); + $notice = Cache::rememberForever('home_page_notice', function () { return Notice::activeForDisplay()?->toArray(); }); @@ -48,6 +64,7 @@ public function index(Request $request, $course) return Inertia::render('Home', [ 'subjects' => $subjects, 'featured_blogs' => $featuredBlogs, + 'trending_posts' => $trendingPosts, 'notice' => $notice, ]); } diff --git a/resources/js/components/BlogCard.vue b/resources/js/components/BlogCard.vue index 89499bf4..e382dda3 100644 --- a/resources/js/components/BlogCard.vue +++ b/resources/js/components/BlogCard.vue @@ -1,27 +1,66 @@