mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
Merge branch 'master' into enhancement/exceptions
This commit is contained in:
commit
4b84eaa9c9
@ -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;
|
||||
}
|
||||
|
@ -22,4 +22,7 @@ interface MangaRepository extends Repository
|
||||
public function orderByRank(): EloquentBuilder|ScoutBuilder;
|
||||
|
||||
public function exceptItemsWithAdultRating(): EloquentBuilder|ScoutBuilder;
|
||||
|
||||
public function orderByScore(): EloquentBuilder|ScoutBuilder;
|
||||
|
||||
}
|
||||
|
@ -4,6 +4,9 @@ namespace App\Dto;
|
||||
|
||||
use App\Casts\EnumCast;
|
||||
use App\Contracts\DataRequest;
|
||||
use App\Dto\Concerns\HasSfwParameter;
|
||||
use App\Dto\Concerns\PreparesData;
|
||||
use App\Enums\AnimeRatingEnum;
|
||||
use App\Enums\AnimeTypeEnum;
|
||||
use App\Enums\TopAnimeFilterEnum;
|
||||
use App\Http\Resources\V4\AnimeCollection;
|
||||
@ -17,9 +20,14 @@ use Spatie\LaravelData\Optional;
|
||||
*/
|
||||
final class QueryTopAnimeItemsCommand extends QueryTopItemsCommand implements DataRequest
|
||||
{
|
||||
use PreparesData, HasSfwParameter;
|
||||
|
||||
#[WithCast(EnumCast::class, AnimeTypeEnum::class), EnumValidation(AnimeTypeEnum::class)]
|
||||
public AnimeTypeEnum|Optional $type;
|
||||
|
||||
#[WithCast(EnumCast::class, AnimeRatingEnum::class), EnumValidation(AnimeRatingEnum::class)]
|
||||
public AnimeRatingEnum|Optional $rating;
|
||||
|
||||
#[WithCast(EnumCast::class, TopAnimeFilterEnum::class), EnumValidation(TopAnimeFilterEnum::class)]
|
||||
public TopAnimeFilterEnum|Optional $filter;
|
||||
}
|
||||
|
@ -4,6 +4,8 @@ namespace App\Dto;
|
||||
|
||||
use App\Casts\EnumCast;
|
||||
use App\Contracts\DataRequest;
|
||||
use App\Dto\Concerns\HasSfwParameter;
|
||||
use App\Dto\Concerns\PreparesData;
|
||||
use App\Enums\MangaTypeEnum;
|
||||
use App\Enums\TopMangaFilterEnum;
|
||||
use App\Http\Resources\V4\MangaCollection;
|
||||
@ -17,6 +19,8 @@ use Spatie\LaravelData\Optional;
|
||||
*/
|
||||
final class QueryTopMangaItemsCommand extends QueryTopItemsCommand implements DataRequest
|
||||
{
|
||||
use PreparesData, HasSfwParameter;
|
||||
|
||||
#[WithCast(EnumCast::class, MangaTypeEnum::class), EnumValidation(MangaTypeEnum::class)]
|
||||
public MangaTypeEnum|Optional $type;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -27,20 +27,16 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe
|
||||
|
||||
public function getTopAiringItems(): EloquentBuilder|ScoutBuilder
|
||||
{
|
||||
return $this->exceptItemsWithAdultRating()
|
||||
->where("airing", true)
|
||||
->whereNotNull("rank")
|
||||
->where("rank", ">", 0)
|
||||
->orderBy("rank");
|
||||
return $this
|
||||
->orderByScore()
|
||||
->where("airing", true);
|
||||
}
|
||||
|
||||
public function getTopUpcomingItems(): EloquentBuilder|ScoutBuilder
|
||||
{
|
||||
return $this->exceptItemsWithAdultRating()
|
||||
->where("status", AnimeStatusEnum::upcoming()->label)
|
||||
->whereNotNull("rank")
|
||||
->where("rank", ">=", 0)
|
||||
->orderBy("rank");
|
||||
return $this
|
||||
->orderByPopularity()
|
||||
->where("status", AnimeStatusEnum::upcoming()->label);
|
||||
}
|
||||
|
||||
public function exceptItemsWithAdultRating(): EloquentBuilder|ScoutBuilder
|
||||
@ -69,17 +65,22 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe
|
||||
|
||||
public function orderByPopularity(): EloquentBuilder|ScoutBuilder
|
||||
{
|
||||
return $this->exceptItemsWithAdultRating()->orderBy("members", "desc");
|
||||
return $this
|
||||
->queryable()
|
||||
->orderBy("members", "desc");
|
||||
}
|
||||
|
||||
public function orderByFavoriteCount(): EloquentBuilder|ScoutBuilder
|
||||
{
|
||||
return $this->exceptItemsWithAdultRating()->orderBy("favorites", "desc");
|
||||
return $this
|
||||
->queryable()
|
||||
->orderBy("favorites", "desc");
|
||||
}
|
||||
|
||||
public function orderByRank(): EloquentBuilder|ScoutBuilder
|
||||
{
|
||||
return $this->exceptItemsWithAdultRating()
|
||||
return $this
|
||||
->queryable()
|
||||
->whereNotNull("rank")
|
||||
->where("rank", ">", 0)
|
||||
->orderBy("rank");
|
||||
@ -149,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");
|
||||
}
|
||||
}
|
||||
|
@ -20,19 +20,23 @@ final class DefaultMangaRepository extends DatabaseRepository implements MangaRe
|
||||
|
||||
public function getTopPublishingItems(): EloquentBuilder|ScoutBuilder
|
||||
{
|
||||
return $this->orderByRank()
|
||||
return $this
|
||||
->orderByPopularity()
|
||||
->where("publishing", true);
|
||||
}
|
||||
|
||||
public function getTopUpcomingItems(): EloquentBuilder|ScoutBuilder
|
||||
{
|
||||
return $this->orderByRank()
|
||||
return $this
|
||||
->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
|
||||
@ -53,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");
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user