diff --git a/app/Enums/ExplorePageFilters.php b/app/Enums/ExplorePageFilters.php new file mode 100644 index 0000000..b7496fc --- /dev/null +++ b/app/Enums/ExplorePageFilters.php @@ -0,0 +1,13 @@ +validate([ + 'sortBy' => ['nullable', 'string', Rule::in(ExplorePageFilters::values())], + ]); + return view('explore') ->with('profileLink', $this->profileLink()) - ->with('deals', $this->deals()); + ->with('deals', $this->deals(ExplorePageFilters::tryFrom($sortBy['sortBy'] ?? null))); } - protected function deals() + protected function deals(?ExplorePageFilters $sortBy) { - return Deal::query() + $query = Deal::query() ->select([ 'id', 'title', 'description', 'image', 'active', 'slug', 'link', 'deal_category_id', 'user_id', @@ -34,9 +41,21 @@ protected function deals() ->withActiveDeals() // Check if the current user interacted with the deal ->withCurrentUserInteractions() - ->withLikes() - ->withRedirections() - ->latest() + ->withLikePerDeal() + ->withRedirectionPerDeal(); + + // Add filters + if ($sortBy === ExplorePageFilters::Like) { + $query->orderBy('total_likes', 'desc'); + } elseif ($sortBy === ExplorePageFilters::Click) { + $query->orderBy('total_redirection', 'desc'); + } else { + $query->orderByRaw( + '(COALESCE(total_likes, 0) / 70.0) + (COALESCE(total_redirection, 0) / 30.0) DESC' + ); + } + + return $query->latest() ->paginate(); } diff --git a/app/Models/Deal.php b/app/Models/Deal.php index d7254dc..9ceff4d 100644 --- a/app/Models/Deal.php +++ b/app/Models/Deal.php @@ -52,7 +52,7 @@ public function scopeWithCurrentUserInteractions(Builder $query): Builder ]); } - public function scopeWithLikes(Builder $query): Builder + public function scopeWithLikePerDeal(Builder $query): Builder { return $query->withCount([ 'interactions as total_likes' => function ($query) { @@ -61,7 +61,7 @@ public function scopeWithLikes(Builder $query): Builder ]); } - public function scopeWithRedirections(Builder $query): Builder + public function scopeWithRedirectionPerDeal(Builder $query): Builder { return $query->withSum([ 'interactions as total_redirection' => function ($query) { diff --git a/resources/views/explore.blade.php b/resources/views/explore.blade.php index f3e7eb2..23d567c 100644 --- a/resources/views/explore.blade.php +++ b/resources/views/explore.blade.php @@ -10,7 +10,7 @@
-