Merge branch 'master' into enhancement/exceptions

This commit is contained in:
Irfan (Nekomata) 2023-07-22 03:44:45 +05:00 committed by GitHub
commit 4b84eaa9c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 55 additions and 18 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

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

View File

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

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

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

View File

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