adds unapproved filter #369

This commit is contained in:
Irfan 2023-04-23 06:49:08 +05:00 committed by pushrbx
parent 1b69c3fe96
commit 6d5930fbc0
5 changed files with 41 additions and 9 deletions

View File

@ -24,6 +24,8 @@ interface AnimeRepository extends Repository
public function excludeNsfwItems(EloquentBuilder|ScoutBuilder &$builder): EloquentBuilder|ScoutBuilder;
public function excludeUnapprovedItems(EloquentBuilder|ScoutBuilder &$builder): EloquentBuilder|ScoutBuilder;
public function orderByPopularity(): EloquentBuilder|ScoutBuilder;
public function orderByFavoriteCount(): EloquentBuilder|ScoutBuilder;
@ -33,7 +35,8 @@ interface AnimeRepository extends Repository
public function getCurrentlyAiring(
?AnimeScheduleFilterEnum $filter = null,
bool $kids = false,
bool $sfw = false
bool $sfw = false,
?bool $unapproved = false
): EloquentBuilder;
public function getAiredBetween(
@ -41,7 +44,8 @@ interface AnimeRepository extends Repository
Carbon $to,
?AnimeTypeEnum $type = null,
?bool $kids = false,
?bool $sfw = false
?bool $sfw = false,
?bool $unapproved = false
): EloquentBuilder;
public function getUpcomingSeasonItems(?AnimeTypeEnum $type = null): EloquentBuilder;

View File

@ -0,0 +1,16 @@
<?php
namespace App\Dto\Concerns;
use App\Casts\ContextualBooleanCast;
use Spatie\LaravelData\Attributes\Validation\BooleanType;
use Spatie\LaravelData\Attributes\WithCast;
use Spatie\LaravelData\Optional;
trait HasUnapprovedParameter
{
use PreparesData;
#[BooleanType, WithCast(ContextualBooleanCast::class)]
public bool|Optional $unapproved = false;
}

View File

@ -7,9 +7,11 @@ use App\Casts\ContextualBooleanCast;
use App\Casts\EnumCast;
use App\Concerns\HasRequestFingerprint;
use App\Contracts\DataRequest;
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\Dto\Concerns\MapsRouteParameters;
use App\Dto\Concerns\PreparesData;
use App\Enums\AnimeScheduleFilterEnum;
@ -25,10 +27,7 @@ use Spatie\LaravelData\Optional;
*/
final class QueryAnimeSchedulesCommand extends Data implements DataRequest
{
use HasLimitParameter, HasRequestFingerprint, HasPageParameter, PreparesData, HasSfwParameter, MapsRouteParameters;
#[BooleanType, WithCast(ContextualBooleanCast::class)]
public bool|Optional $kids = false;
use HasLimitParameter, HasRequestFingerprint, HasPageParameter, PreparesData, HasSfwParameter, HasKidsParameter, HasUnapprovedParameter, MapsRouteParameters;
#[WithCast(EnumCast::class, AnimeScheduleFilterEnum::class), EnumValidation(AnimeScheduleFilterEnum::class)]
public ?AnimeScheduleFilterEnum $dayFilter;

View File

@ -24,7 +24,7 @@ final class QueryAnimeSchedulesHandler implements RequestHandler
public function handle($request)
{
$limit = intval($request->limit ?? Env::get("MAX_RESULTS_PER_PAGE", 25));
$results = $this->repository->getCurrentlyAiring($request->dayFilter, $request->kids, $request->sfw);
$results = $this->repository->getCurrentlyAiring($request->dayFilter, $request->kids, $request->sfw, $request->unapproved);
$results = $results->paginate(
$limit,
["*"],

View File

@ -55,6 +55,12 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe
->where("demographics.mal_id", "!=", Constants::GENRE_ANIME_EROTICA);
}
public function excludeUnapprovedItems(EloquentBuilder|ScoutBuilder &$builder): EloquentBuilder|ScoutBuilder
{
return $builder
->where("approved", true);
}
public function excludeKidsItems(EloquentBuilder|ScoutBuilder &$builder): EloquentBuilder|ScoutBuilder
{
return $builder
@ -82,7 +88,9 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe
public function getCurrentlyAiring(
?AnimeScheduleFilterEnum $filter = null,
bool $kids = false,
bool $sfw = false): EloquentBuilder
bool $sfw = false,
?bool $unapproved = false
): EloquentBuilder
{
/*
* all have status as currently airing
@ -94,6 +102,10 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe
->where("type", AnimeTypeEnum::tv()->label)
->where("status", AnimeStatusEnum::airing()->label);
if (!$unapproved) {
$this->excludeUnapprovedItems($queryable);
}
if (!$kids) {
$this->excludeKidsItems($queryable);
}
@ -119,7 +131,8 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe
Carbon $to,
?AnimeTypeEnum $type = null,
?bool $kids = false,
?bool $sfw = false
?bool $sfw = false,
?bool $unapproved = false
): EloquentBuilder
{
$queryable = $this->queryable(true)->whereBetween("aired.from", [