Merge pull request #448 from jikan-me/bugfix/seasonal-102123

bugfix: only allow results that are within specified season/year and nulls
This commit is contained in:
Irfan (Nekomata) 2023-11-04 04:18:23 +05:00 committed by GitHub
commit 3d822c2afb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 5 deletions

View File

@ -4,6 +4,7 @@ namespace App\Contracts;
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 @@ interface AnimeRepository extends Repository
public function getAiredBetween(
Carbon $from,
Carbon $to,
?AnimeTypeEnum $type = null
?AnimeTypeEnum $type = null,
?string $premiered = null
): EloquentBuilder;
public function getUpcomingSeasonItems(?AnimeTypeEnum $type = null): EloquentBuilder;

View File

@ -32,6 +32,8 @@ abstract class QueryAnimeSeasonHandlerBase implements RequestHandler
{
$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 */

View File

@ -52,6 +52,8 @@ final class QueryCurrentAnimeSeasonHandler extends QueryAnimeSeasonHandlerBase
* @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);
}
}

View File

@ -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 @@ final class QuerySpecificAnimeSeasonHandler extends QueryAnimeSeasonHandlerBase
*/
[$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);
}
}

View File

@ -7,6 +7,7 @@ use App\Contracts\AnimeRepository;
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 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe
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 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe
// ]);
/** @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()