Top Anime/Manga: updates default sorting for filters

This commit is contained in:
Irfan 2023-07-21 22:23:34 +05:00
parent e5f24aefbd
commit 1fed924344
6 changed files with 31 additions and 13 deletions

View File

@ -9,6 +9,7 @@ use Illuminate\Contracts\Database\Query\Builder as EloquentBuilder;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Laravel\Scout\Builder as ScoutBuilder; use Laravel\Scout\Builder as ScoutBuilder;
use Laravel\Scout\Scout;
/** /**
* @implements Repository<Anime> * @implements Repository<Anime>
@ -44,4 +45,6 @@ interface AnimeRepository extends Repository
): EloquentBuilder; ): EloquentBuilder;
public function getUpcomingSeasonItems(?AnimeTypeEnum $type = null): EloquentBuilder; public function getUpcomingSeasonItems(?AnimeTypeEnum $type = null): EloquentBuilder;
public function orderByScore(): EloquentBuilder|ScoutBuilder;
} }

View File

@ -22,4 +22,7 @@ interface MangaRepository extends Repository
public function orderByRank(): EloquentBuilder|ScoutBuilder; public function orderByRank(): EloquentBuilder|ScoutBuilder;
public function exceptItemsWithAdultRating(): EloquentBuilder|ScoutBuilder; public function exceptItemsWithAdultRating(): EloquentBuilder|ScoutBuilder;
public function orderByScore(): EloquentBuilder|ScoutBuilder;
} }

View File

@ -36,7 +36,7 @@ final class QueryTopAnimeItemsHandler implements RequestHandler
TopAnimeFilterEnum::upcoming() => $this->repository->getTopUpcomingItems(), TopAnimeFilterEnum::upcoming() => $this->repository->getTopUpcomingItems(),
TopAnimeFilterEnum::bypopularity() => $this->repository->orderByPopularity(), TopAnimeFilterEnum::bypopularity() => $this->repository->orderByPopularity(),
TopAnimeFilterEnum::favorite() => $this->repository->orderByFavoriteCount(), TopAnimeFilterEnum::favorite() => $this->repository->orderByFavoriteCount(),
default => $this->repository->orderByRank() default => $this->repository->orderByScore()
}; };
$builder = $builder->filter($requestParams); $builder = $builder->filter($requestParams);

View File

@ -35,7 +35,7 @@ class QueryTopMangaItemsHandler implements RequestHandler
TopMangaFilterEnum::upcoming() => $this->repository->getTopUpcomingItems(), TopMangaFilterEnum::upcoming() => $this->repository->getTopUpcomingItems(),
TopMangaFilterEnum::bypopularity() => $this->repository->orderByPopularity(), TopMangaFilterEnum::bypopularity() => $this->repository->orderByPopularity(),
TopMangaFilterEnum::favorite() => $this->repository->orderByFavoriteCount(), TopMangaFilterEnum::favorite() => $this->repository->orderByFavoriteCount(),
default => $this->repository->orderByRank() default => $this->repository->orderByScore()
}; };
$builder = $builder->filter($requestParams); $builder = $builder->filter($requestParams);

View File

@ -28,19 +28,15 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe
public function getTopAiringItems(): EloquentBuilder|ScoutBuilder public function getTopAiringItems(): EloquentBuilder|ScoutBuilder
{ {
return $this return $this
->where("airing", true) ->orderByScore()
->whereNotNull("rank") ->where("airing", true);
->where("rank", ">", 0)
->orderBy("rank");
} }
public function getTopUpcomingItems(): EloquentBuilder|ScoutBuilder public function getTopUpcomingItems(): EloquentBuilder|ScoutBuilder
{ {
return $this return $this
->where("status", AnimeStatusEnum::upcoming()->label) ->orderByPopularity()
->whereNotNull("rank") ->where("status", AnimeStatusEnum::upcoming()->label);
->where("rank", ">=", 0)
->orderBy("rank");
} }
public function exceptItemsWithAdultRating(): EloquentBuilder|ScoutBuilder public function exceptItemsWithAdultRating(): EloquentBuilder|ScoutBuilder
@ -154,4 +150,11 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe
return $queryable->orderBy("members", "desc"); return $queryable->orderBy("members", "desc");
} }
public function orderByScore(): EloquentBuilder|ScoutBuilder
{
return $this
->queryable()
->orderBy("score", "desc");
}
} }

View File

@ -21,20 +21,22 @@ final class DefaultMangaRepository extends DatabaseRepository implements MangaRe
public function getTopPublishingItems(): EloquentBuilder|ScoutBuilder public function getTopPublishingItems(): EloquentBuilder|ScoutBuilder
{ {
return $this return $this
->orderByRank() ->orderByPopularity()
->where("publishing", true); ->where("publishing", true);
} }
public function getTopUpcomingItems(): EloquentBuilder|ScoutBuilder public function getTopUpcomingItems(): EloquentBuilder|ScoutBuilder
{ {
return $this return $this
->orderByRank() ->orderByPopularity()
->where("status", MangaStatusEnum::upcoming()->label); ->where("status", MangaStatusEnum::upcoming()->label);
} }
public function orderByPopularity(): EloquentBuilder|ScoutBuilder public function orderByPopularity(): EloquentBuilder|ScoutBuilder
{ {
return $this->queryable()->orderBy("members", "desc"); return $this
->queryable()
->orderBy("members", "desc");
} }
public function orderByFavoriteCount(): EloquentBuilder|ScoutBuilder public function orderByFavoriteCount(): EloquentBuilder|ScoutBuilder
@ -55,4 +57,11 @@ final class DefaultMangaRepository extends DatabaseRepository implements MangaRe
/** @noinspection PhpUndefinedMethodInspection */ /** @noinspection PhpUndefinedMethodInspection */
return $this->queryable()->exceptItemsWithAdultRating(); return $this->queryable()->exceptItemsWithAdultRating();
} }
public function orderByScore(): EloquentBuilder|ScoutBuilder
{
return $this
->queryable()
->orderBy("score", "desc");
}
} }