diff --git a/app/Contracts/AnimeRepository.php b/app/Contracts/AnimeRepository.php index b4d6d5c2..c0d734a7 100644 --- a/app/Contracts/AnimeRepository.php +++ b/app/Contracts/AnimeRepository.php @@ -4,6 +4,7 @@ use App\Anime; use App\Enums\AnimeScheduleFilterEnum; +use App\Enums\AnimeSeasonEnum; use App\Enums\AnimeTypeEnum; use Illuminate\Contracts\Database\Query\Builder as EloquentBuilder; use Illuminate\Support\Carbon; @@ -41,7 +42,8 @@ public function getCurrentlyAiring( public function getAiredBetween( Carbon $from, Carbon $to, - ?AnimeTypeEnum $type = null + ?AnimeTypeEnum $type = null, + ?string $premiered = null ): EloquentBuilder; public function getUpcomingSeasonItems(?AnimeTypeEnum $type = null): EloquentBuilder; diff --git a/app/Features/QueryAnimeSeasonHandlerBase.php b/app/Features/QueryAnimeSeasonHandlerBase.php index 67a8cedf..778cd07e 100644 --- a/app/Features/QueryAnimeSeasonHandlerBase.php +++ b/app/Features/QueryAnimeSeasonHandlerBase.php @@ -32,6 +32,8 @@ public function handle($request): JsonResponse { $requestParams = collect($request->all()); $type = $requestParams->has("filter") ? $request->filter : null; + $season = $requestParams->has("season") ? $request->season : null; + $year = $requestParams->has("year") ? $request->year : null; $results = $this->getSeasonItems($request, $type); // apply sfw, kids and unapproved filters /** @noinspection PhpUndefinedMethodInspection */ diff --git a/app/Features/QueryCurrentAnimeSeasonHandler.php b/app/Features/QueryCurrentAnimeSeasonHandler.php index 92353037..da7d427e 100644 --- a/app/Features/QueryCurrentAnimeSeasonHandler.php +++ b/app/Features/QueryCurrentAnimeSeasonHandler.php @@ -52,6 +52,8 @@ protected function getSeasonItems($request, ?AnimeTypeEnum $type): Builder * @var Carbon $to */ [$from, $to] = $this->getSeasonRange($year, $season); - return $this->repository->getAiredBetween($from, $to, $type); + $premiered = ucfirst($season)." {$year}"; + + return $this->repository->getAiredBetween($from, $to, $type, $premiered); } } diff --git a/app/Features/QuerySpecificAnimeSeasonHandler.php b/app/Features/QuerySpecificAnimeSeasonHandler.php index 5aa2f48b..f133c301 100644 --- a/app/Features/QuerySpecificAnimeSeasonHandler.php +++ b/app/Features/QuerySpecificAnimeSeasonHandler.php @@ -3,6 +3,7 @@ namespace App\Features; use App\Dto\QuerySpecificAnimeSeasonCommand; +use App\Enums\AnimeSeasonEnum; use App\Enums\AnimeStatusEnum; use App\Enums\AnimeTypeEnum; use Illuminate\Contracts\Database\Query\Builder; @@ -26,8 +27,9 @@ protected function getSeasonItems($request, ?AnimeTypeEnum $type): Builder */ [$from, $to] = $this->getSeasonRange($request->year, $request->season); + $premiered = ucfirst($request->season)." {$request->year}"; - return $this->repository->getAiredBetween($from, $to, $type); + return $this->repository->getAiredBetween($from, $to, $type, $premiered); // ->where("status", "!=", AnimeStatusEnum::upcoming()->label); } } diff --git a/app/Repositories/DefaultAnimeRepository.php b/app/Repositories/DefaultAnimeRepository.php index 91ac44a6..38bd4325 100644 --- a/app/Repositories/DefaultAnimeRepository.php +++ b/app/Repositories/DefaultAnimeRepository.php @@ -7,6 +7,7 @@ use App\Contracts\Repository; use App\Enums\AnimeRatingEnum; use App\Enums\AnimeScheduleFilterEnum; +use App\Enums\AnimeSeasonEnum; use App\Enums\AnimeStatusEnum; use App\Enums\AnimeTypeEnum; use Illuminate\Contracts\Database\Query\Builder as EloquentBuilder; @@ -115,7 +116,8 @@ public function getCurrentlyAiring( public function getAiredBetween( Carbon $from, Carbon $to, - ?AnimeTypeEnum $type = null + ?AnimeTypeEnum $type = null, + ?string $premiered = null ): EloquentBuilder { // $queryable = $this->queryable(true)->whereBetween("aired.from", [ @@ -124,7 +126,16 @@ public function getAiredBetween( // ]); /** @noinspection PhpParamsInspection */ - $queryable = $this->queryable(true)->whereRaw([ + $queryable = $this->queryable(true); + + if ($premiered !== null) { + $queryable = $queryable + ->where("premiered", null) + ->orWhere("premiered", $premiered); + } + + $queryable = $queryable + ->whereRaw([ "aired.from" => [ '$gte' => $from->toAtomString(), '$lte' => $to->modify("last day of this month")->toAtomString()