From 1fed924344cca5a839cc5cf6e5e9f80dde7f11a4 Mon Sep 17 00:00:00 2001 From: Irfan Date: Fri, 21 Jul 2023 22:23:34 +0500 Subject: [PATCH] Top Anime/Manga: updates default sorting for filters --- app/Contracts/AnimeRepository.php | 3 +++ app/Contracts/MangaRepository.php | 3 +++ app/Features/QueryTopAnimeItemsHandler.php | 2 +- app/Features/QueryTopMangaItemsHandler.php | 2 +- app/Repositories/DefaultAnimeRepository.php | 19 +++++++++++-------- app/Repositories/DefaultMangaRepository.php | 15 ++++++++++++--- 6 files changed, 31 insertions(+), 13 deletions(-) diff --git a/app/Contracts/AnimeRepository.php b/app/Contracts/AnimeRepository.php index 2c13049..b4d6d5c 100644 --- a/app/Contracts/AnimeRepository.php +++ b/app/Contracts/AnimeRepository.php @@ -9,6 +9,7 @@ use Illuminate\Contracts\Database\Query\Builder as EloquentBuilder; use Illuminate\Support\Carbon; use Illuminate\Support\Collection; use Laravel\Scout\Builder as ScoutBuilder; +use Laravel\Scout\Scout; /** * @implements Repository @@ -44,4 +45,6 @@ interface AnimeRepository extends Repository ): EloquentBuilder; public function getUpcomingSeasonItems(?AnimeTypeEnum $type = null): EloquentBuilder; + + public function orderByScore(): EloquentBuilder|ScoutBuilder; } diff --git a/app/Contracts/MangaRepository.php b/app/Contracts/MangaRepository.php index 28b60ad..71955ae 100644 --- a/app/Contracts/MangaRepository.php +++ b/app/Contracts/MangaRepository.php @@ -22,4 +22,7 @@ interface MangaRepository extends Repository public function orderByRank(): EloquentBuilder|ScoutBuilder; public function exceptItemsWithAdultRating(): EloquentBuilder|ScoutBuilder; + + public function orderByScore(): EloquentBuilder|ScoutBuilder; + } diff --git a/app/Features/QueryTopAnimeItemsHandler.php b/app/Features/QueryTopAnimeItemsHandler.php index 485c755..547b0b5 100644 --- a/app/Features/QueryTopAnimeItemsHandler.php +++ b/app/Features/QueryTopAnimeItemsHandler.php @@ -36,7 +36,7 @@ final class QueryTopAnimeItemsHandler implements RequestHandler TopAnimeFilterEnum::upcoming() => $this->repository->getTopUpcomingItems(), TopAnimeFilterEnum::bypopularity() => $this->repository->orderByPopularity(), TopAnimeFilterEnum::favorite() => $this->repository->orderByFavoriteCount(), - default => $this->repository->orderByRank() + default => $this->repository->orderByScore() }; $builder = $builder->filter($requestParams); diff --git a/app/Features/QueryTopMangaItemsHandler.php b/app/Features/QueryTopMangaItemsHandler.php index 9d2c9ab..5370dd9 100644 --- a/app/Features/QueryTopMangaItemsHandler.php +++ b/app/Features/QueryTopMangaItemsHandler.php @@ -35,7 +35,7 @@ class QueryTopMangaItemsHandler implements RequestHandler TopMangaFilterEnum::upcoming() => $this->repository->getTopUpcomingItems(), TopMangaFilterEnum::bypopularity() => $this->repository->orderByPopularity(), TopMangaFilterEnum::favorite() => $this->repository->orderByFavoriteCount(), - default => $this->repository->orderByRank() + default => $this->repository->orderByScore() }; $builder = $builder->filter($requestParams); diff --git a/app/Repositories/DefaultAnimeRepository.php b/app/Repositories/DefaultAnimeRepository.php index 36636b5..91ac44a 100644 --- a/app/Repositories/DefaultAnimeRepository.php +++ b/app/Repositories/DefaultAnimeRepository.php @@ -28,19 +28,15 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe public function getTopAiringItems(): EloquentBuilder|ScoutBuilder { return $this - ->where("airing", true) - ->whereNotNull("rank") - ->where("rank", ">", 0) - ->orderBy("rank"); + ->orderByScore() + ->where("airing", true); } public function getTopUpcomingItems(): EloquentBuilder|ScoutBuilder { return $this - ->where("status", AnimeStatusEnum::upcoming()->label) - ->whereNotNull("rank") - ->where("rank", ">=", 0) - ->orderBy("rank"); + ->orderByPopularity() + ->where("status", AnimeStatusEnum::upcoming()->label); } public function exceptItemsWithAdultRating(): EloquentBuilder|ScoutBuilder @@ -154,4 +150,11 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe return $queryable->orderBy("members", "desc"); } + + public function orderByScore(): EloquentBuilder|ScoutBuilder + { + return $this + ->queryable() + ->orderBy("score", "desc"); + } } diff --git a/app/Repositories/DefaultMangaRepository.php b/app/Repositories/DefaultMangaRepository.php index 74aa759..9bc5f38 100644 --- a/app/Repositories/DefaultMangaRepository.php +++ b/app/Repositories/DefaultMangaRepository.php @@ -21,20 +21,22 @@ final class DefaultMangaRepository extends DatabaseRepository implements MangaRe public function getTopPublishingItems(): EloquentBuilder|ScoutBuilder { return $this - ->orderByRank() + ->orderByPopularity() ->where("publishing", true); } public function getTopUpcomingItems(): EloquentBuilder|ScoutBuilder { return $this - ->orderByRank() + ->orderByPopularity() ->where("status", MangaStatusEnum::upcoming()->label); } public function orderByPopularity(): EloquentBuilder|ScoutBuilder { - return $this->queryable()->orderBy("members", "desc"); + return $this + ->queryable() + ->orderBy("members", "desc"); } public function orderByFavoriteCount(): EloquentBuilder|ScoutBuilder @@ -55,4 +57,11 @@ final class DefaultMangaRepository extends DatabaseRepository implements MangaRe /** @noinspection PhpUndefinedMethodInspection */ return $this->queryable()->exceptItemsWithAdultRating(); } + + public function orderByScore(): EloquentBuilder|ScoutBuilder + { + return $this + ->queryable() + ->orderBy("score", "desc"); + } }