update random anime/manga, adds unapproved, minor refactor

This commit is contained in:
Irfan 2023-04-23 07:42:36 +05:00 committed by pushrbx
parent 615a1613c6
commit 12322b6e9a
7 changed files with 44 additions and 18 deletions

View File

@ -7,6 +7,7 @@ use App\Enums\AnimeScheduleFilterEnum;
use App\Enums\AnimeTypeEnum;
use Illuminate\Contracts\Database\Query\Builder as EloquentBuilder;
use Illuminate\Support\Carbon;
use Illuminate\Support\Collection;
use Laravel\Scout\Builder as ScoutBuilder;
/**
@ -20,11 +21,11 @@ interface AnimeRepository extends Repository
public function exceptItemsWithAdultRating(): EloquentBuilder|ScoutBuilder;
public function excludeKidsItems(EloquentBuilder|ScoutBuilder &$builder): EloquentBuilder|ScoutBuilder;
public function excludeKidsItems(&$builder): Collection|EloquentBuilder|ScoutBuilder;
public function excludeNsfwItems(EloquentBuilder|ScoutBuilder &$builder): EloquentBuilder|ScoutBuilder;
public function excludeNsfwItems(&$builder): Collection|EloquentBuilder|ScoutBuilder;
public function excludeUnapprovedItems(EloquentBuilder|ScoutBuilder &$builder): EloquentBuilder|ScoutBuilder;
public function excludeUnapprovedItems(&$builder): Collection|EloquentBuilder|ScoutBuilder;
public function orderByPopularity(): EloquentBuilder|ScoutBuilder;

View File

@ -4,6 +4,7 @@ namespace App\Dto;
use App\Contracts\DataRequest;
use App\Dto\Concerns\HasSfwParameter;
use App\Dto\Concerns\HasUnapprovedParameter;
use App\Http\Resources\V4\AnimeResource;
use Spatie\LaravelData\Data;
@ -12,5 +13,5 @@ use Spatie\LaravelData\Data;
*/
final class QueryRandomAnimeCommand extends Data implements DataRequest
{
use HasSfwParameter;
use HasSfwParameter, HasUnapprovedParameter;
}

View File

@ -4,6 +4,7 @@ namespace App\Dto;
use App\Contracts\DataRequest;
use App\Dto\Concerns\HasSfwParameter;
use App\Dto\Concerns\HasUnapprovedParameter;
use App\Http\Resources\V4\MangaResource;
use Spatie\LaravelData\Attributes\Validation\BooleanType;
use Spatie\LaravelData\Data;
@ -14,5 +15,5 @@ use Spatie\LaravelData\Optional;
*/
final class QueryRandomMangaCommand extends Data implements DataRequest
{
use HasSfwParameter;
use HasSfwParameter, HasUnapprovedParameter;
}

View File

@ -26,18 +26,23 @@ final class QueryRandomAnimeHandler implements RequestHandler
public function handle($request): AnimeResource
{
$sfw = Optional::create() !== $request->sfw ? $request->sfw : null;
$unapproved = Optional::create() !== $request->unapproved ? $request->unapproved : null;
/**
* @var Collection $results;
*/
$results = $this->repository;
if (!$unapproved) {
$results->excludeUnapprovedItems($results);
}
if ($sfw) {
$results = $this->repository->exceptItemsWithAdultRating()->random();
} else {
$results = $this->repository->random();
$results->excludeNsfwItems($results);
}
return new AnimeResource(
$results->first()
$results->random()->first()
);
}

View File

@ -26,18 +26,23 @@ final class QueryRandomMangaHandler implements RequestHandler
public function handle($request)
{
$sfw = Optional::create() !== $request->sfw ? $request->sfw : null;
$unapproved = Optional::create() !== $request->unapproved ? $request->unapproved : null;
/**
* @var Collection $results;
*/
$results = $this->repository;
if (!$unapproved) {
$results->excludeUnapprovedItems($results);
}
if ($sfw) {
$results = $this->repository->exceptItemsWithAdultRating()->random();
} else {
$results = $this->repository->random();
$results->excludeNsfwItems($results);
}
return new MangaResource(
$results->first()
$results->random()->first()
);
}

View File

@ -10,6 +10,7 @@ use App\Enums\AnimeScheduleFilterEnum;
use App\Enums\AnimeStatusEnum;
use App\Enums\AnimeTypeEnum;
use Illuminate\Contracts\Database\Query\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Carbon;
use Jikan\Helper\Constants;
use Laravel\Scout\Builder as ScoutBuilder;
@ -47,26 +48,24 @@ final class DefaultAnimeRepository extends DatabaseRepository implements AnimeRe
$builder = $this->queryable()
->where("rating", "!=", AnimeRatingEnum::rx()->label);
$this->excludeUnapprovedItems($builder);
$this->excludeNsfwItems($builder);
return $builder;
}
public function excludeNsfwItems(EloquentBuilder|ScoutBuilder &$builder): EloquentBuilder|ScoutBuilder
public function excludeNsfwItems(&$builder): EloquentBuilder|ScoutBuilder
{
return $builder
->where("demographics.mal_id", "!=", Constants::GENRE_ANIME_HENTAI)
->where("demographics.mal_id", "!=", Constants::GENRE_ANIME_EROTICA);
}
public function excludeUnapprovedItems(EloquentBuilder|ScoutBuilder &$builder): EloquentBuilder|ScoutBuilder
public function excludeUnapprovedItems(&$builder): Collection|EloquentBuilder|ScoutBuilder
{
return $builder
->where("approved", true);
}
public function excludeKidsItems(EloquentBuilder|ScoutBuilder &$builder): EloquentBuilder|ScoutBuilder
public function excludeKidsItems(&$builder): EloquentBuilder|ScoutBuilder
{
return $builder
->where("demographics.mal_id", "!=", Constants::GENRE_ANIME_KIDS);

View File

@ -7,6 +7,7 @@ use App\Enums\MangaStatusEnum;
use App\Enums\MangaTypeEnum;
use App\Manga;
use Illuminate\Contracts\Database\Query\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Collection;
use Jikan\Helper\Constants;
use Laravel\Scout\Builder as ScoutBuilder;
@ -54,4 +55,17 @@ final class DefaultMangaRepository extends DatabaseRepository implements MangaRe
->where("demographics.mal_id", "!=", Constants::GENRE_MANGA_HENTAI)
->where("demographics.mal_id", "!=", Constants::GENRE_MANGA_EROTICA);
}
public function excludeNsfwItems(&$builder): EloquentBuilder|ScoutBuilder
{
return $builder
->where("demographics.mal_id", "!=", Constants::GENRE_MANGA_HENTAI)
->where("demographics.mal_id", "!=", Constants::GENRE_MANGA_EROTICA);
}
public function excludeUnapprovedItems(&$builder): Collection|EloquentBuilder|ScoutBuilder
{
return $builder
->where("approved", true);
}
}