mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
add new /random/list/* endpoints
This commit is contained in:
parent
3b59908e4d
commit
f20e40c138
@ -3,19 +3,16 @@
|
|||||||
namespace App\Dto;
|
namespace App\Dto;
|
||||||
|
|
||||||
use App\Contracts\DataRequest;
|
use App\Contracts\DataRequest;
|
||||||
use App\Dto\Concerns\HasLimitParameterWithSmallerMax;
|
|
||||||
use App\Dto\Concerns\HasSfwParameter;
|
use App\Dto\Concerns\HasSfwParameter;
|
||||||
use App\Dto\Concerns\HasUnapprovedParameter;
|
use App\Dto\Concerns\HasUnapprovedParameter;
|
||||||
use App\Http\Resources\V4\AnimeCollection;
|
|
||||||
use App\Http\Resources\V4\AnimeResource;
|
use App\Http\Resources\V4\AnimeResource;
|
||||||
use Spatie\LaravelData\Data;
|
use Spatie\LaravelData\Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @implements DataRequest<AnimeResource|AnimeCollection>
|
* @implements DataRequest<AnimeResource>
|
||||||
*/
|
*/
|
||||||
final class QueryRandomAnimeCommand extends Data implements DataRequest
|
final class QueryRandomAnimeCommand extends Data implements DataRequest
|
||||||
{
|
{
|
||||||
use HasSfwParameter,
|
use HasSfwParameter,
|
||||||
HasUnapprovedParameter,
|
HasUnapprovedParameter;
|
||||||
HasLimitParameterWithSmallerMax;
|
|
||||||
}
|
}
|
||||||
|
20
app/Dto/QueryRandomAnimeListCommand.php
Normal file
20
app/Dto/QueryRandomAnimeListCommand.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Dto;
|
||||||
|
|
||||||
|
use App\Contracts\DataRequest;
|
||||||
|
use App\Dto\Concerns\HasLimitParameterWithSmallerMax;
|
||||||
|
use App\Dto\Concerns\HasSfwParameter;
|
||||||
|
use App\Dto\Concerns\HasUnapprovedParameter;
|
||||||
|
use App\Http\Resources\V4\AnimeCollection;
|
||||||
|
use Spatie\LaravelData\Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @implements DataRequest<AnimeCollection>
|
||||||
|
*/
|
||||||
|
final class QueryRandomAnimeListCommand extends Data implements DataRequest
|
||||||
|
{
|
||||||
|
use HasSfwParameter,
|
||||||
|
HasUnapprovedParameter,
|
||||||
|
HasLimitParameterWithSmallerMax;
|
||||||
|
}
|
@ -12,5 +12,4 @@ use Spatie\LaravelData\Data;
|
|||||||
*/
|
*/
|
||||||
final class QueryRandomCharacterCommand extends Data implements DataRequest
|
final class QueryRandomCharacterCommand extends Data implements DataRequest
|
||||||
{
|
{
|
||||||
use HasLimitParameterWithSmallerMax;
|
|
||||||
}
|
}
|
||||||
|
16
app/Dto/QueryRandomCharacterListCommand.php
Normal file
16
app/Dto/QueryRandomCharacterListCommand.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Dto;
|
||||||
|
|
||||||
|
use App\Contracts\DataRequest;
|
||||||
|
use App\Dto\Concerns\HasLimitParameterWithSmallerMax;
|
||||||
|
use App\Http\Resources\V4\CharacterCollection;
|
||||||
|
use Spatie\LaravelData\Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @implements DataRequest<CharacterCollection>
|
||||||
|
*/
|
||||||
|
final class QueryRandomCharacterListCommand extends Data implements DataRequest
|
||||||
|
{
|
||||||
|
use HasLimitParameterWithSmallerMax;
|
||||||
|
}
|
@ -3,19 +3,16 @@
|
|||||||
namespace App\Dto;
|
namespace App\Dto;
|
||||||
|
|
||||||
use App\Contracts\DataRequest;
|
use App\Contracts\DataRequest;
|
||||||
use App\Dto\Concerns\HasLimitParameterWithSmallerMax;
|
|
||||||
use App\Dto\Concerns\HasSfwParameter;
|
use App\Dto\Concerns\HasSfwParameter;
|
||||||
use App\Dto\Concerns\HasUnapprovedParameter;
|
use App\Dto\Concerns\HasUnapprovedParameter;
|
||||||
use App\Http\Resources\V4\MangaCollection;
|
|
||||||
use App\Http\Resources\V4\MangaResource;
|
use App\Http\Resources\V4\MangaResource;
|
||||||
use Spatie\LaravelData\Data;
|
use Spatie\LaravelData\Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @implements DataRequest<MangaResource|MangaCollection>
|
* @implements DataRequest<MangaResource>
|
||||||
*/
|
*/
|
||||||
final class QueryRandomMangaCommand extends Data implements DataRequest
|
final class QueryRandomMangaCommand extends Data implements DataRequest
|
||||||
{
|
{
|
||||||
use HasSfwParameter,
|
use HasSfwParameter,
|
||||||
HasUnapprovedParameter,
|
HasUnapprovedParameter;
|
||||||
HasLimitParameterWithSmallerMax;
|
|
||||||
}
|
}
|
||||||
|
20
app/Dto/QueryRandomMangaListCommand.php
Normal file
20
app/Dto/QueryRandomMangaListCommand.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Dto;
|
||||||
|
|
||||||
|
use App\Contracts\DataRequest;
|
||||||
|
use App\Dto\Concerns\HasLimitParameterWithSmallerMax;
|
||||||
|
use App\Dto\Concerns\HasSfwParameter;
|
||||||
|
use App\Dto\Concerns\HasUnapprovedParameter;
|
||||||
|
use App\Http\Resources\V4\MangaCollection;
|
||||||
|
use Spatie\LaravelData\Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @implements DataRequest<MangaCollection>
|
||||||
|
*/
|
||||||
|
final class QueryRandomMangaListCommand extends Data implements DataRequest
|
||||||
|
{
|
||||||
|
use HasSfwParameter,
|
||||||
|
HasUnapprovedParameter,
|
||||||
|
HasLimitParameterWithSmallerMax;
|
||||||
|
}
|
@ -3,15 +3,12 @@
|
|||||||
namespace App\Dto;
|
namespace App\Dto;
|
||||||
|
|
||||||
use App\Contracts\DataRequest;
|
use App\Contracts\DataRequest;
|
||||||
use App\Dto\Concerns\HasLimitParameterWithSmallerMax;
|
|
||||||
use App\Http\Resources\V4\PersonCollection;
|
|
||||||
use App\Http\Resources\V4\PersonResource;
|
use App\Http\Resources\V4\PersonResource;
|
||||||
use Spatie\LaravelData\Data;
|
use Spatie\LaravelData\Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @implements DataRequest<PersonResource|PersonCollection>
|
* @implements DataRequest<PersonResource>
|
||||||
*/
|
*/
|
||||||
final class QueryRandomPersonCommand extends Data implements DataRequest
|
final class QueryRandomPersonCommand extends Data implements DataRequest
|
||||||
{
|
{
|
||||||
use HasLimitParameterWithSmallerMax;
|
|
||||||
}
|
}
|
||||||
|
16
app/Dto/QueryRandomPersonListCommand.php
Normal file
16
app/Dto/QueryRandomPersonListCommand.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Dto;
|
||||||
|
|
||||||
|
use App\Contracts\DataRequest;
|
||||||
|
use App\Dto\Concerns\HasLimitParameterWithSmallerMax;
|
||||||
|
use App\Http\Resources\V4\PersonCollection;
|
||||||
|
use Spatie\LaravelData\Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @implements DataRequest<PersonCollection>
|
||||||
|
*/
|
||||||
|
final class QueryRandomPersonListCommand extends Data implements DataRequest
|
||||||
|
{
|
||||||
|
use HasLimitParameterWithSmallerMax;
|
||||||
|
}
|
@ -12,5 +12,4 @@ use Spatie\LaravelData\Data;
|
|||||||
*/
|
*/
|
||||||
final class QueryRandomUserCommand extends Data implements DataRequest
|
final class QueryRandomUserCommand extends Data implements DataRequest
|
||||||
{
|
{
|
||||||
use HasLimitParameterWithSmallerMax;
|
|
||||||
}
|
}
|
||||||
|
16
app/Dto/QueryRandomUserListCommand.php
Normal file
16
app/Dto/QueryRandomUserListCommand.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Dto;
|
||||||
|
|
||||||
|
use App\Contracts\DataRequest;
|
||||||
|
use App\Dto\Concerns\HasLimitParameterWithSmallerMax;
|
||||||
|
use App\Http\Resources\V4\UserCollection;
|
||||||
|
use Spatie\LaravelData\Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @implements DataRequest<UserCollection>
|
||||||
|
*/
|
||||||
|
final class QueryRandomUserListCommand extends Data implements DataRequest
|
||||||
|
{
|
||||||
|
use HasLimitParameterWithSmallerMax;
|
||||||
|
}
|
@ -5,31 +5,27 @@ namespace App\Features;
|
|||||||
use App\Anime;
|
use App\Anime;
|
||||||
use App\Contracts\RequestHandler;
|
use App\Contracts\RequestHandler;
|
||||||
use App\Dto\QueryRandomAnimeCommand;
|
use App\Dto\QueryRandomAnimeCommand;
|
||||||
use App\Http\Resources\V4\AnimeCollection;
|
|
||||||
use App\Http\Resources\V4\AnimeResource;
|
use App\Http\Resources\V4\AnimeResource;
|
||||||
use Spatie\LaravelData\Optional;
|
use Spatie\LaravelData\Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @implements RequestHandler<QueryRandomAnimeCommand, AnimeResource|AnimeCollection>
|
* @implements RequestHandler<QueryRandomAnimeCommand, AnimeResource>
|
||||||
*/
|
*/
|
||||||
final class QueryRandomAnimeHandler implements RequestHandler
|
final class QueryRandomAnimeHandler implements RequestHandler
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public function handle($request): AnimeResource|AnimeCollection
|
public function handle($request): AnimeResource
|
||||||
{
|
{
|
||||||
$queryable = Anime::query();
|
$queryable = Anime::query();
|
||||||
|
|
||||||
$sfwParam = $request->sfw instanceof Optional ? false : $request->sfw;
|
$sfwParam = $request->sfw instanceof Optional ? false : $request->sfw;
|
||||||
$unapprovedParam = $request->unapproved instanceof Optional ? false : $request->unapproved;
|
$unapprovedParam = $request->unapproved instanceof Optional ? false : $request->unapproved;
|
||||||
$limit = $request->limit instanceof Optional ? 1 : $request->limit;
|
|
||||||
|
|
||||||
$results = $queryable->random($limit, $sfwParam, $unapprovedParam);
|
$results = $queryable->random(1, $sfwParam, $unapprovedParam);
|
||||||
|
|
||||||
return $results->count() === 1
|
return new AnimeResource($results->first());
|
||||||
? new AnimeResource($results->first())
|
|
||||||
: new AnimeCollection($results, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
40
app/Features/QueryRandomAnimeListHandler.php
Normal file
40
app/Features/QueryRandomAnimeListHandler.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Features;
|
||||||
|
|
||||||
|
use App\Anime;
|
||||||
|
use App\Contracts\RequestHandler;
|
||||||
|
use App\Dto\QueryRandomAnimeCommand;
|
||||||
|
use App\Dto\QueryRandomAnimeListCommand;
|
||||||
|
use App\Http\Resources\V4\AnimeCollection;
|
||||||
|
use Spatie\LaravelData\Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @implements RequestHandler<QueryRandomAnimeCommand, AnimeCollection>
|
||||||
|
*/
|
||||||
|
final class QueryRandomAnimeListHandler implements RequestHandler
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function handle($request): AnimeCollection
|
||||||
|
{
|
||||||
|
$queryable = Anime::query();
|
||||||
|
|
||||||
|
$sfwParam = $request->sfw instanceof Optional ? false : $request->sfw;
|
||||||
|
$unapprovedParam = $request->unapproved instanceof Optional ? false : $request->unapproved;
|
||||||
|
$limit = $request->limit instanceof Optional ? 1 : $request->limit;
|
||||||
|
|
||||||
|
$results = $queryable->random($limit, $sfwParam, $unapprovedParam);
|
||||||
|
|
||||||
|
return new AnimeCollection($results, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function requestClass(): string
|
||||||
|
{
|
||||||
|
return QueryRandomAnimeListCommand::class;
|
||||||
|
}
|
||||||
|
}
|
@ -5,12 +5,10 @@ namespace App\Features;
|
|||||||
use App\Character;
|
use App\Character;
|
||||||
use App\Contracts\RequestHandler;
|
use App\Contracts\RequestHandler;
|
||||||
use App\Dto\QueryRandomCharacterCommand;
|
use App\Dto\QueryRandomCharacterCommand;
|
||||||
use App\Http\Resources\V4\CharacterCollection;
|
|
||||||
use App\Http\Resources\V4\CharacterResource;
|
use App\Http\Resources\V4\CharacterResource;
|
||||||
use Spatie\LaravelData\Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @extends QueryRandomCharacterHandler<QueryRandomCharacterCommand, CharacterResource|CharacterCollection>
|
* @extends QueryRandomCharacterHandler<QueryRandomCharacterCommand, CharacterResource>
|
||||||
*/
|
*/
|
||||||
final class QueryRandomCharacterHandler implements RequestHandler
|
final class QueryRandomCharacterHandler implements RequestHandler
|
||||||
{
|
{
|
||||||
@ -18,17 +16,13 @@ final class QueryRandomCharacterHandler implements RequestHandler
|
|||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public function handle($request): CharacterResource|CharacterCollection
|
public function handle($request): CharacterResource
|
||||||
{
|
{
|
||||||
$queryable = Character::query();
|
return new CharacterResource(
|
||||||
|
Character::query()
|
||||||
$limit = $request->limit instanceof Optional ? 1 : $request->limit;
|
->random(1)
|
||||||
|
->first()
|
||||||
$results = $queryable->random($limit);
|
);
|
||||||
|
|
||||||
return $results->count() === 1
|
|
||||||
? new CharacterResource($results->first())
|
|
||||||
: new CharacterCollection($results, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
35
app/Features/QueryRandomCharacterListHandler.php
Normal file
35
app/Features/QueryRandomCharacterListHandler.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Features;
|
||||||
|
|
||||||
|
use App\Character;
|
||||||
|
use App\Contracts\RequestHandler;
|
||||||
|
use App\Dto\QueryRandomCharacterListCommand;
|
||||||
|
use App\Http\Resources\V4\CharacterCollection;
|
||||||
|
use Spatie\LaravelData\Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @implements RequestHandler<QueryRandomCharacterListCommand, CharacterCollection>
|
||||||
|
*/
|
||||||
|
final class QueryRandomCharacterListHandler implements RequestHandler
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function handle($request): CharacterCollection
|
||||||
|
{
|
||||||
|
$queryable = Character::query();
|
||||||
|
$limit = $request->limit instanceof Optional ? 1 : $request->limit;
|
||||||
|
$results = $queryable->random($limit);
|
||||||
|
|
||||||
|
return new CharacterCollection($results, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function requestClass(): string
|
||||||
|
{
|
||||||
|
return QueryRandomCharacterListCommand::class;
|
||||||
|
}
|
||||||
|
}
|
@ -4,32 +4,27 @@ namespace App\Features;
|
|||||||
|
|
||||||
use App\Contracts\RequestHandler;
|
use App\Contracts\RequestHandler;
|
||||||
use App\Dto\QueryRandomMangaCommand;
|
use App\Dto\QueryRandomMangaCommand;
|
||||||
use App\Http\Resources\V4\MangaCollection;
|
|
||||||
use App\Http\Resources\V4\MangaResource;
|
use App\Http\Resources\V4\MangaResource;
|
||||||
use App\Manga;
|
use App\Manga;
|
||||||
use Spatie\LaravelData\Optional;
|
use Spatie\LaravelData\Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @implements RequestHandler<QueryRandomMangaCommand, MangaResource|MangaCollection>
|
* @implements RequestHandler<QueryRandomMangaCommand, MangaResource>
|
||||||
*/
|
*/
|
||||||
final class QueryRandomMangaHandler implements RequestHandler
|
final class QueryRandomMangaHandler implements RequestHandler
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public function handle($request): MangaResource|MangaCollection
|
public function handle($request): MangaResource
|
||||||
{
|
{
|
||||||
$queryable = Manga::query();
|
$queryable = Manga::query();
|
||||||
|
|
||||||
$sfwParam = $request->sfw instanceof Optional ? false : $request->sfw;
|
$sfwParam = $request->sfw instanceof Optional ? false : $request->sfw;
|
||||||
$unapprovedParam = $request->unapproved instanceof Optional ? false : $request->unapproved;
|
$unapprovedParam = $request->unapproved instanceof Optional ? false : $request->unapproved;
|
||||||
$limit = $request->limit instanceof Optional ? 1 : $request->limit;
|
$results = $queryable->random(1, $sfwParam, $unapprovedParam);
|
||||||
|
|
||||||
$results = $queryable->random($limit, $sfwParam, $unapprovedParam);
|
return new MangaResource($results->first());
|
||||||
|
|
||||||
return $results->count() === 1
|
|
||||||
? new MangaResource($results->first())
|
|
||||||
: new MangaCollection($results, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
40
app/Features/QueryRandomMangaListHandler.php
Normal file
40
app/Features/QueryRandomMangaListHandler.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Features;
|
||||||
|
|
||||||
|
use App\Contracts\RequestHandler;
|
||||||
|
use App\Dto\QueryRandomMangaCommand;
|
||||||
|
use App\Dto\QueryRandomMangaListCommand;
|
||||||
|
use App\Http\Resources\V4\MangaCollection;
|
||||||
|
use App\Manga;
|
||||||
|
use Spatie\LaravelData\Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @implements RequestHandler<QueryRandomMangaCommand, MangaCollection>
|
||||||
|
*/
|
||||||
|
final class QueryRandomMangaListHandler implements RequestHandler
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function handle($request): MangaCollection
|
||||||
|
{
|
||||||
|
$queryable = Manga::query();
|
||||||
|
|
||||||
|
$sfwParam = $request->sfw instanceof Optional ? false : $request->sfw;
|
||||||
|
$unapprovedParam = $request->unapproved instanceof Optional ? false : $request->unapproved;
|
||||||
|
$limit = $request->limit instanceof Optional ? 1 : $request->limit;
|
||||||
|
|
||||||
|
$results = $queryable->random($limit, $sfwParam, $unapprovedParam);
|
||||||
|
|
||||||
|
return new MangaCollection($results, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function requestClass(): string
|
||||||
|
{
|
||||||
|
return QueryRandomMangaListCommand::class;
|
||||||
|
}
|
||||||
|
}
|
@ -4,13 +4,11 @@ namespace App\Features;
|
|||||||
|
|
||||||
use App\Contracts\RequestHandler;
|
use App\Contracts\RequestHandler;
|
||||||
use App\Dto\QueryRandomPersonCommand;
|
use App\Dto\QueryRandomPersonCommand;
|
||||||
use App\Http\Resources\V4\PersonCollection;
|
|
||||||
use App\Http\Resources\V4\PersonResource;
|
use App\Http\Resources\V4\PersonResource;
|
||||||
use App\Person;
|
use App\Person;
|
||||||
use Spatie\LaravelData\Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @extends RequestHandler<QueryRandomPersonCommand, PersonResource|PersonCollection>
|
* @extends RequestHandler<QueryRandomPersonCommand, PersonResource>
|
||||||
*/
|
*/
|
||||||
final class QueryRandomPersonHandler implements RequestHandler
|
final class QueryRandomPersonHandler implements RequestHandler
|
||||||
{
|
{
|
||||||
@ -18,17 +16,13 @@ final class QueryRandomPersonHandler implements RequestHandler
|
|||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public function handle($request): PersonResource|PersonCollection
|
public function handle($request): PersonResource
|
||||||
{
|
{
|
||||||
$queryable = Person::query();
|
return new PersonResource(
|
||||||
|
Person::query()
|
||||||
$limit = $request->limit instanceof Optional ? 1 : $request->limit;
|
->random()
|
||||||
|
->first()
|
||||||
$results = $queryable->random($limit);
|
);
|
||||||
|
|
||||||
return $results->count() === 1
|
|
||||||
? new PersonResource($results->first())
|
|
||||||
: new PersonCollection($results, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
37
app/Features/QueryRandomPersonListHandler.php
Normal file
37
app/Features/QueryRandomPersonListHandler.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Features;
|
||||||
|
|
||||||
|
use App\Contracts\RequestHandler;
|
||||||
|
use App\Dto\QueryRandomPersonCommand;
|
||||||
|
use App\Dto\QueryRandomPersonListCommand;
|
||||||
|
use App\Http\Resources\V4\PersonCollection;
|
||||||
|
use App\Person;
|
||||||
|
use Spatie\LaravelData\Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @extends RequestHandler<QueryRandomPersonCommand, PersonCollection>
|
||||||
|
*/
|
||||||
|
final class QueryRandomPersonListHandler implements RequestHandler
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function handle($request): PersonCollection
|
||||||
|
{
|
||||||
|
$queryable = Person::query();
|
||||||
|
$limit = $request->limit instanceof Optional ? 1 : $request->limit;
|
||||||
|
$results = $queryable->random($limit);
|
||||||
|
|
||||||
|
return new PersonCollection($results, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function requestClass(): string
|
||||||
|
{
|
||||||
|
return QueryRandomPersonListCommand::class;
|
||||||
|
}
|
||||||
|
}
|
@ -5,29 +5,22 @@ namespace App\Features;
|
|||||||
use App\Contracts\RequestHandler;
|
use App\Contracts\RequestHandler;
|
||||||
use App\Dto\QueryRandomUserCommand;
|
use App\Dto\QueryRandomUserCommand;
|
||||||
use App\Http\Resources\V4\ProfileResource;
|
use App\Http\Resources\V4\ProfileResource;
|
||||||
use App\Http\Resources\V4\UserCollection;
|
|
||||||
use App\Profile;
|
use App\Profile;
|
||||||
use Spatie\LaravelData\Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @extends RequestHandler<QueryRandomUserCommand, ProfileResource|UserCollection>
|
* @extends RequestHandler<QueryRandomUserCommand, ProfileResource>
|
||||||
*/
|
*/
|
||||||
final class QueryRandomUserHandler implements RequestHandler
|
final class QueryRandomUserHandler implements RequestHandler
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public function handle($request): ProfileResource|UserCollection
|
public function handle($request): ProfileResource
|
||||||
{
|
{
|
||||||
$queryable = Profile::query();
|
$queryable = Profile::query();
|
||||||
|
$results = $queryable->random(1);
|
||||||
|
|
||||||
$limit = $request->limit instanceof Optional ? 1 : $request->limit;
|
return new ProfileResource($results->first());
|
||||||
|
|
||||||
$results = $queryable->random($limit);
|
|
||||||
|
|
||||||
return $results->count() === 1
|
|
||||||
? new ProfileResource($results->first())
|
|
||||||
: new UserCollection($results, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
37
app/Features/QueryRandomUserListHandler.php
Normal file
37
app/Features/QueryRandomUserListHandler.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Features;
|
||||||
|
|
||||||
|
use App\Contracts\RequestHandler;
|
||||||
|
use App\Dto\QueryRandomUserCommand;
|
||||||
|
use App\Dto\QueryRandomUserListCommand;
|
||||||
|
use App\Http\Resources\V4\ProfileResource;
|
||||||
|
use App\Http\Resources\V4\UserCollection;
|
||||||
|
use App\Profile;
|
||||||
|
use Spatie\LaravelData\Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @extends RequestHandler<QueryRandomUserCommand, UserCollection>
|
||||||
|
*/
|
||||||
|
final class QueryRandomUserListHandler implements RequestHandler
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function handle($request): UserCollection
|
||||||
|
{
|
||||||
|
$queryable = Profile::query();
|
||||||
|
$limit = $request->limit instanceof Optional ? 1 : $request->limit;
|
||||||
|
$results = $queryable->random($limit);
|
||||||
|
|
||||||
|
return new UserCollection($results, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function requestClass(): string
|
||||||
|
{
|
||||||
|
return QueryRandomUserListCommand::class;
|
||||||
|
}
|
||||||
|
}
|
@ -3,10 +3,14 @@
|
|||||||
namespace App\Http\Controllers\V4DB;
|
namespace App\Http\Controllers\V4DB;
|
||||||
|
|
||||||
use App\Dto\QueryRandomAnimeCommand;
|
use App\Dto\QueryRandomAnimeCommand;
|
||||||
|
use App\Dto\QueryRandomAnimeListCommand;
|
||||||
use App\Dto\QueryRandomCharacterCommand;
|
use App\Dto\QueryRandomCharacterCommand;
|
||||||
|
use App\Dto\QueryRandomCharacterListCommand;
|
||||||
use App\Dto\QueryRandomMangaCommand;
|
use App\Dto\QueryRandomMangaCommand;
|
||||||
use App\Dto\QueryRandomPersonCommand;
|
use App\Dto\QueryRandomPersonCommand;
|
||||||
|
use App\Dto\QueryRandomPersonListCommand;
|
||||||
use App\Dto\QueryRandomUserCommand;
|
use App\Dto\QueryRandomUserCommand;
|
||||||
|
use App\Dto\QueryRandomUserListCommand;
|
||||||
|
|
||||||
|
|
||||||
class RandomController extends Controller
|
class RandomController extends Controller
|
||||||
@ -44,7 +48,7 @@ class RandomController extends Controller
|
|||||||
*
|
*
|
||||||
* @OA\Response(
|
* @OA\Response(
|
||||||
* response="200",
|
* response="200",
|
||||||
* description="Returns a single random anime resource or multiple resources in an array when `limit` is supplied",
|
* description="Returns a single random anime resource",
|
||||||
* @OA\JsonContent(
|
* @OA\JsonContent(
|
||||||
* @OA\Property(
|
* @OA\Property(
|
||||||
* property="data",
|
* property="data",
|
||||||
@ -63,6 +67,39 @@ class RandomController extends Controller
|
|||||||
return $this->mediator->send($command);
|
return $this->mediator->send($command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Get(
|
||||||
|
* path="/random/list/anime",
|
||||||
|
* operationId="getRandomAnimeList",
|
||||||
|
* tags={"random"},
|
||||||
|
*
|
||||||
|
* @OA\Parameter(ref="#/components/parameters/limit"),
|
||||||
|
*
|
||||||
|
* @OA\Response(
|
||||||
|
* response="200",
|
||||||
|
* description="Returns multiple anime resources. You can use `limit` to control the number of items returned. By default it returns 1 and maximum 5",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* @OA\Property(
|
||||||
|
* property="data",
|
||||||
|
* type="array",
|
||||||
|
* @OA\Items(
|
||||||
|
* type="object",
|
||||||
|
* ref="#/components/schemas/anime"
|
||||||
|
* ),
|
||||||
|
* ),
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response="400",
|
||||||
|
* description="Error: Bad request. When required parameters were not supplied.",
|
||||||
|
* ),
|
||||||
|
* ),
|
||||||
|
*/
|
||||||
|
public function animeList(QueryRandomAnimeListCommand $command)
|
||||||
|
{
|
||||||
|
return $this->mediator->send($command);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @OA\Get(
|
* @OA\Get(
|
||||||
* path="/random/manga",
|
* path="/random/manga",
|
||||||
@ -92,6 +129,39 @@ class RandomController extends Controller
|
|||||||
return $this->mediator->send($command);
|
return $this->mediator->send($command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Get(
|
||||||
|
* path="/random/list/manga",
|
||||||
|
* operationId="getRandomMangaList",
|
||||||
|
* tags={"random"},
|
||||||
|
*
|
||||||
|
* @OA\Parameter(ref="#/components/parameters/limit"),
|
||||||
|
*
|
||||||
|
* @OA\Response(
|
||||||
|
* response="200",
|
||||||
|
* description="Returns multiple manga resources. You can use `limit` to control the number of items returned. By default it returns 1 and maximum 5",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* @OA\Property(
|
||||||
|
* property="data",
|
||||||
|
* type="array",
|
||||||
|
* @OA\Items(
|
||||||
|
* type="object",
|
||||||
|
* ref="#/components/schemas/manga"
|
||||||
|
* ),
|
||||||
|
* ),
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response="400",
|
||||||
|
* description="Error: Bad request. When required parameters were not supplied.",
|
||||||
|
* ),
|
||||||
|
* ),
|
||||||
|
*/
|
||||||
|
public function mangaList(QueryRandomAnimeListCommand $command)
|
||||||
|
{
|
||||||
|
return $this->mediator->send($command);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @OA\Get(
|
* @OA\Get(
|
||||||
* path="/random/characters",
|
* path="/random/characters",
|
||||||
@ -121,6 +191,39 @@ class RandomController extends Controller
|
|||||||
return $this->mediator->send($command);
|
return $this->mediator->send($command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Get(
|
||||||
|
* path="/random/list/characters",
|
||||||
|
* operationId="getRandomCharactersList",
|
||||||
|
* tags={"random"},
|
||||||
|
*
|
||||||
|
* @OA\Parameter(ref="#/components/parameters/limit"),
|
||||||
|
*
|
||||||
|
* @OA\Response(
|
||||||
|
* response="200",
|
||||||
|
* description="Returns multiple character resources. You can use `limit` to control the number of items returned. By default it returns 1 and maximum 5",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* @OA\Property(
|
||||||
|
* property="data",
|
||||||
|
* type="array",
|
||||||
|
* @OA\Items(
|
||||||
|
* type="object",
|
||||||
|
* ref="#/components/schemas/character"
|
||||||
|
* ),
|
||||||
|
* ),
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response="400",
|
||||||
|
* description="Error: Bad request. When required parameters were not supplied.",
|
||||||
|
* ),
|
||||||
|
* ),
|
||||||
|
*/
|
||||||
|
public function charactersList(QueryRandomCharacterListCommand $command)
|
||||||
|
{
|
||||||
|
return $this->mediator->send($command);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @OA\Get(
|
* @OA\Get(
|
||||||
* path="/random/people",
|
* path="/random/people",
|
||||||
@ -150,6 +253,39 @@ class RandomController extends Controller
|
|||||||
return $this->mediator->send($command);
|
return $this->mediator->send($command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Get(
|
||||||
|
* path="/random/list/people",
|
||||||
|
* operationId="getRandomPeopleList",
|
||||||
|
* tags={"random"},
|
||||||
|
*
|
||||||
|
* @OA\Parameter(ref="#/components/parameters/limit"),
|
||||||
|
*
|
||||||
|
* @OA\Response(
|
||||||
|
* response="200",
|
||||||
|
* description="Returns multiple people resources. You can use `limit` to control the number of items returned. By default it returns 1 and maximum 5",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* @OA\Property(
|
||||||
|
* property="data",
|
||||||
|
* type="array",
|
||||||
|
* @OA\Items(
|
||||||
|
* type="object",
|
||||||
|
* ref="#/components/schemas/person"
|
||||||
|
* ),
|
||||||
|
* ),
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response="400",
|
||||||
|
* description="Error: Bad request. When required parameters were not supplied.",
|
||||||
|
* ),
|
||||||
|
* ),
|
||||||
|
*/
|
||||||
|
public function peopleList(QueryRandomPersonListCommand $command)
|
||||||
|
{
|
||||||
|
return $this->mediator->send($command);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @OA\Get(
|
* @OA\Get(
|
||||||
* path="/random/users",
|
* path="/random/users",
|
||||||
@ -178,4 +314,37 @@ class RandomController extends Controller
|
|||||||
{
|
{
|
||||||
return $this->mediator->send($command);
|
return $this->mediator->send($command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OA\Get(
|
||||||
|
* path="/random/list/users",
|
||||||
|
* operationId="getRandomUsersList",
|
||||||
|
* tags={"random"},
|
||||||
|
*
|
||||||
|
* @OA\Parameter(ref="#/components/parameters/limit"),
|
||||||
|
*
|
||||||
|
* @OA\Response(
|
||||||
|
* response="200",
|
||||||
|
* description="Returns multiple user resources. You can use `limit` to control the number of items returned. By default it returns 1 and maximum 5",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* @OA\Property(
|
||||||
|
* property="data",
|
||||||
|
* type="array",
|
||||||
|
* @OA\Items(
|
||||||
|
* type="object",
|
||||||
|
* ref="#/components/schemas/user_profile"
|
||||||
|
* ),
|
||||||
|
* ),
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response="400",
|
||||||
|
* description="Error: Bad request. When required parameters were not supplied.",
|
||||||
|
* ),
|
||||||
|
* ),
|
||||||
|
*/
|
||||||
|
public function usersList(QueryRandomUserListCommand $command)
|
||||||
|
{
|
||||||
|
return $this->mediator->send($command);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,18 +5,21 @@ namespace App\Http\Middleware;
|
|||||||
use App\Http\HttpHelper;
|
use App\Http\HttpHelper;
|
||||||
use App\Support\JikanConfig;
|
use App\Support\JikanConfig;
|
||||||
use Closure;
|
use Closure;
|
||||||
use Illuminate\Support\Env;
|
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Jikan\Exception\BadResponseException;
|
|
||||||
|
|
||||||
class MicroCaching
|
class MicroCaching
|
||||||
{
|
{
|
||||||
private const NO_CACHING = [
|
private const NO_CACHING = [
|
||||||
'RandomController@anime',
|
'RandomController@anime',
|
||||||
|
'RandomController@animeList',
|
||||||
'RandomController@manga',
|
'RandomController@manga',
|
||||||
|
'RandomController@mangaList',
|
||||||
'RandomController@characters',
|
'RandomController@characters',
|
||||||
|
'RandomController@charactersList',
|
||||||
'RandomController@people',
|
'RandomController@people',
|
||||||
|
'RandomController@peopleList',
|
||||||
'RandomController@users',
|
'RandomController@users',
|
||||||
|
'RandomController@usersList',
|
||||||
'InsightsController@main'
|
'InsightsController@main'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -307,10 +307,15 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
// automatically resolvable dependencies or no dependencies at all
|
// automatically resolvable dependencies or no dependencies at all
|
||||||
$requestHandlersWithNoDependencies = [
|
$requestHandlersWithNoDependencies = [
|
||||||
Features\QueryRandomAnimeHandler::class,
|
Features\QueryRandomAnimeHandler::class,
|
||||||
|
Features\QueryRandomAnimeListHandler::class,
|
||||||
Features\QueryRandomMangaHandler::class,
|
Features\QueryRandomMangaHandler::class,
|
||||||
|
Features\QueryRandomMangaListHandler::class,
|
||||||
Features\QueryRandomCharacterHandler::class,
|
Features\QueryRandomCharacterHandler::class,
|
||||||
|
Features\QueryRandomCharacterListHandler::class,
|
||||||
Features\QueryRandomPersonHandler::class,
|
Features\QueryRandomPersonHandler::class,
|
||||||
|
Features\QueryRandomPersonListHandler::class,
|
||||||
Features\QueryRandomUserHandler::class,
|
Features\QueryRandomUserHandler::class,
|
||||||
|
Features\QueryRandomUserListHandler::class,
|
||||||
Features\QueryAnimeSchedulesHandler::class,
|
Features\QueryAnimeSchedulesHandler::class,
|
||||||
Features\QueryCurrentAnimeSeasonHandler::class,
|
Features\QueryCurrentAnimeSeasonHandler::class,
|
||||||
Features\QuerySpecificAnimeSeasonHandler::class,
|
Features\QuerySpecificAnimeSeasonHandler::class,
|
||||||
|
@ -556,6 +556,33 @@ $router->group(
|
|||||||
$router->get('/users', [
|
$router->get('/users', [
|
||||||
'uses' => 'RandomController@users',
|
'uses' => 'RandomController@users',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$router->group(
|
||||||
|
[
|
||||||
|
'prefix' => '/list'
|
||||||
|
],
|
||||||
|
function() use ($router) {
|
||||||
|
$router->get('/anime', [
|
||||||
|
'uses' => 'RandomController@animeList',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$router->get('/manga', [
|
||||||
|
'uses' => 'RandomController@mangaList',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$router->get('/characters', [
|
||||||
|
'uses' => 'RandomController@charactersList',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$router->get('/people', [
|
||||||
|
'uses' => 'RandomController@peopleList',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$router->get('/users', [
|
||||||
|
'uses' => 'RandomController@usersList',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user