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\Collection;
use Laravel\Scout\Builder as ScoutBuilder;
use Laravel\Scout\Scout;
/**
* @implements Repository<Anime>
@ -44,4 +45,6 @@ interface AnimeRepository extends Repository
): 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 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::bypopularity() => $this->repository->orderByPopularity(),
TopAnimeFilterEnum::favorite() => $this->repository->orderByFavoriteCount(),
default => $this->repository->orderByRank()
default => $this->repository->orderByScore()
};
$builder = $builder->filter($requestParams);

View File

@ -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);

View File

@ -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");
}
}

View File

@ -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");
}
}