mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
update random anime/manga, adds unapproved
, minor refactor
This commit is contained in:
parent
615a1613c6
commit
12322b6e9a
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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()
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -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()
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user