From d5f3b0904d9b624a347ef309cd9652faaad60fee Mon Sep 17 00:00:00 2001 From: Irfan Date: Sun, 23 Apr 2023 06:54:32 +0500 Subject: [PATCH] adds `unapproved`, `kids`, `sfw` to remaining seasons, schedules endpoints --- app/Dto/QueryAnimeSeasonCommand.php | 3 ++- app/Dto/QuerySpecificAnimeSeasonCommand.php | 5 +++- .../QuerySpecificAnimeSeasonHandler.php | 2 +- .../QueryUpcomingAnimeSeasonHandler.php | 2 +- app/Repositories/DefaultAnimeRepository.php | 25 ++++++++++++++++--- 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/app/Dto/QueryAnimeSeasonCommand.php b/app/Dto/QueryAnimeSeasonCommand.php index 831f53f..3b7c875 100644 --- a/app/Dto/QueryAnimeSeasonCommand.php +++ b/app/Dto/QueryAnimeSeasonCommand.php @@ -10,6 +10,7 @@ use App\Dto\Concerns\HasKidsParameter; use App\Dto\Concerns\HasLimitParameter; use App\Dto\Concerns\HasPageParameter; use App\Dto\Concerns\HasSfwParameter; +use App\Dto\Concerns\HasUnapprovedParameter; use App\Enums\AnimeTypeEnum; use App\Rules\Attributes\EnumValidation; use Spatie\LaravelData\Attributes\WithCast; @@ -19,7 +20,7 @@ use Spatie\LaravelData\Optional; abstract class QueryAnimeSeasonCommand extends Data implements DataRequest { - use HasSfwParameter, HasKidsParameter, HasLimitParameter, HasRequestFingerprint, HasPageParameter; + use HasSfwParameter, HasKidsParameter, HasUnapprovedParameter, HasLimitParameter, HasRequestFingerprint, HasPageParameter; #[WithCast(EnumCast::class, AnimeTypeEnum::class), EnumValidation(AnimeTypeEnum::class)] public AnimeTypeEnum|Optional $filter; diff --git a/app/Dto/QuerySpecificAnimeSeasonCommand.php b/app/Dto/QuerySpecificAnimeSeasonCommand.php index a18bd93..7a94899 100644 --- a/app/Dto/QuerySpecificAnimeSeasonCommand.php +++ b/app/Dto/QuerySpecificAnimeSeasonCommand.php @@ -3,6 +3,9 @@ namespace App\Dto; use App\Casts\EnumCast; +use App\Dto\Concerns\HasKidsParameter; +use App\Dto\Concerns\HasSfwParameter; +use App\Dto\Concerns\HasUnapprovedParameter; use App\Dto\Concerns\MapsRouteParameters; use App\Enums\AnimeSeasonEnum; use App\Rules\Attributes\EnumValidation; @@ -13,7 +16,7 @@ use Spatie\LaravelData\Attributes\WithCast; final class QuerySpecificAnimeSeasonCommand extends QueryAnimeSeasonCommand { - use MapsRouteParameters; + use MapsRouteParameters, HasSfwParameter, HasKidsParameter, HasUnapprovedParameter; #[Required, Between(1000, 2999)] public int $year; diff --git a/app/Features/QuerySpecificAnimeSeasonHandler.php b/app/Features/QuerySpecificAnimeSeasonHandler.php index dd10781..58bf4df 100644 --- a/app/Features/QuerySpecificAnimeSeasonHandler.php +++ b/app/Features/QuerySpecificAnimeSeasonHandler.php @@ -30,6 +30,6 @@ final class QuerySpecificAnimeSeasonHandler extends QueryAnimeSeasonHandlerBase */ [$from, $to] = $this->getSeasonRange($request->year, $request->season); - return $this->repository->getAiredBetween($from, $to, $type, $request->kids, $request->sfw); + return $this->repository->getAiredBetween($from, $to, $type, $request->kids, $request->sfw, $request->unapproved); } } diff --git a/app/Features/QueryUpcomingAnimeSeasonHandler.php b/app/Features/QueryUpcomingAnimeSeasonHandler.php index 4f3952e..e345d46 100644 --- a/app/Features/QueryUpcomingAnimeSeasonHandler.php +++ b/app/Features/QueryUpcomingAnimeSeasonHandler.php @@ -23,6 +23,6 @@ final class QueryUpcomingAnimeSeasonHandler extends QueryAnimeSeasonHandlerBase protected function getSeasonItems($request, ?AnimeTypeEnum $type): Builder { - return $this->repository->getUpcomingSeasonItems($type); + return $this->repository->getUpcomingSeasonItems($type, $request->kids, $request->sfw, $request->unapproved); } } diff --git a/app/Repositories/DefaultAnimeRepository.php b/app/Repositories/DefaultAnimeRepository.php index b4fbb18..4fba02b 100644 --- a/app/Repositories/DefaultAnimeRepository.php +++ b/app/Repositories/DefaultAnimeRepository.php @@ -87,8 +87,8 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe public function getCurrentlyAiring( ?AnimeScheduleFilterEnum $filter = null, - bool $kids = false, - bool $sfw = false, + ?bool $kids = false, + ?bool $sfw = false, ?bool $unapproved = false ): EloquentBuilder { @@ -144,6 +144,10 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe $queryable = $queryable->where("type", $type->label); } + if (!$unapproved) { + $this->excludeUnapprovedItems($queryable); + } + if (!$kids) { $this->excludeKidsItems($queryable); } @@ -157,8 +161,9 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe public function getUpcomingSeasonItems( ?AnimeTypeEnum $type = null, - bool $kids = false, - bool $sfw = false + ?bool $kids = false, + ?bool $sfw = false, + ?bool $unapproved = false ): EloquentBuilder { $queryable = $this->queryable(true)->where("status", AnimeStatusEnum::upcoming()->label); @@ -167,6 +172,18 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe $queryable = $queryable->where("type", $type->label); } + if (!$unapproved) { + $this->excludeUnapprovedItems($queryable); + } + + if (!$kids) { + $this->excludeKidsItems($queryable); + } + + if ($sfw) { + $this->excludeNsfwItems($queryable); + } + return $queryable->orderBy("members", "desc"); } }