mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
People Resource: Add /voices, /anime, /manga endpoints
Removes `published_manga`, `voice_acting_roles`, `anime_staff_positions` from Person resource
This commit is contained in:
parent
06af87f9bf
commit
f5fc6e36eb
@ -5,6 +5,11 @@ namespace App\Http\Controllers\V4DB;
|
||||
use App\Character;
|
||||
use App\Http\HttpHelper;
|
||||
use App\Http\HttpResponse;
|
||||
use App\Http\Resources\V4\PersonAnimeCollection;
|
||||
use App\Http\Resources\V4\PersonAnimeResource;
|
||||
use App\Http\Resources\V4\PersonMangaCollection;
|
||||
use App\Http\Resources\V4\PersonVoiceResource;
|
||||
use App\Http\Resources\V4\PersonVoicesCollection;
|
||||
use App\Http\Resources\V4\PicturesResource;
|
||||
use App\Person;
|
||||
use Illuminate\Http\Request;
|
||||
@ -91,6 +96,231 @@ class PersonController extends Controller
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/people/{id}/anime",
|
||||
* operationId="getPersonAnime",
|
||||
* tags={"people"},
|
||||
*
|
||||
* @OA\Response(
|
||||
* response="200",
|
||||
* description="Returns person's anime staff positions",
|
||||
* @OA\JsonContent()
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response="400",
|
||||
* description="Error: Bad request. When required parameters were not supplied.",
|
||||
* ),
|
||||
* )
|
||||
*/
|
||||
public function anime(Request $request, int $id)
|
||||
{
|
||||
$results = Person::query()
|
||||
->where('mal_id', $id)
|
||||
->get();
|
||||
|
||||
if (
|
||||
$results->isEmpty()
|
||||
|| $this->isExpired($request, $results)
|
||||
) {
|
||||
$response = Person::scrape($id);
|
||||
|
||||
if (HttpHelper::hasError($response)) {
|
||||
return HttpResponse::notFound($request);
|
||||
}
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
$meta = [
|
||||
'createdAt' => new UTCDateTime(),
|
||||
'modifiedAt' => new UTCDateTime(),
|
||||
'request_hash' => $this->fingerprint
|
||||
];
|
||||
}
|
||||
$meta['modifiedAt'] = new UTCDateTime();
|
||||
|
||||
$response = $meta + $response;
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
Person::query()
|
||||
->insert($response);
|
||||
}
|
||||
|
||||
if ($this->isExpired($request, $results)) {
|
||||
Person::query()
|
||||
->where('mal_id', $id)
|
||||
->update($response);
|
||||
}
|
||||
|
||||
$results = Person::query()
|
||||
->where('mal_id', $id)
|
||||
->get();
|
||||
}
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
return HttpResponse::notFound($request);
|
||||
}
|
||||
|
||||
$response = (new PersonAnimeCollection(
|
||||
$results->first()['anime_staff_positions']
|
||||
))->response();
|
||||
|
||||
return $this->prepareResponse(
|
||||
$response,
|
||||
$results,
|
||||
$request
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/people/{id}/voices",
|
||||
* operationId="getPersonVoices",
|
||||
* tags={"people"},
|
||||
*
|
||||
* @OA\Response(
|
||||
* response="200",
|
||||
* description="Returns person's voice acting roles",
|
||||
* @OA\JsonContent()
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response="400",
|
||||
* description="Error: Bad request. When required parameters were not supplied.",
|
||||
* ),
|
||||
* )
|
||||
*/
|
||||
public function voices(Request $request, int $id)
|
||||
{
|
||||
$results = Person::query()
|
||||
->where('mal_id', $id)
|
||||
->get();
|
||||
|
||||
if (
|
||||
$results->isEmpty()
|
||||
|| $this->isExpired($request, $results)
|
||||
) {
|
||||
$response = Person::scrape($id);
|
||||
|
||||
if (HttpHelper::hasError($response)) {
|
||||
return HttpResponse::notFound($request);
|
||||
}
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
$meta = [
|
||||
'createdAt' => new UTCDateTime(),
|
||||
'modifiedAt' => new UTCDateTime(),
|
||||
'request_hash' => $this->fingerprint
|
||||
];
|
||||
}
|
||||
$meta['modifiedAt'] = new UTCDateTime();
|
||||
|
||||
$response = $meta + $response;
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
Person::query()
|
||||
->insert($response);
|
||||
}
|
||||
|
||||
if ($this->isExpired($request, $results)) {
|
||||
Person::query()
|
||||
->where('mal_id', $id)
|
||||
->update($response);
|
||||
}
|
||||
|
||||
$results = Person::query()
|
||||
->where('mal_id', $id)
|
||||
->get();
|
||||
}
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
return HttpResponse::notFound($request);
|
||||
}
|
||||
|
||||
$response = (new PersonVoicesCollection(
|
||||
$results->first()['voice_acting_roles']
|
||||
))->response();
|
||||
|
||||
return $this->prepareResponse(
|
||||
$response,
|
||||
$results,
|
||||
$request
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/people/{id}/manga",
|
||||
* operationId="getPersonManga",
|
||||
* tags={"people"},
|
||||
*
|
||||
* @OA\Response(
|
||||
* response="200",
|
||||
* description="Returns person's published manga",
|
||||
* @OA\JsonContent()
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response="400",
|
||||
* description="Error: Bad request. When required parameters were not supplied.",
|
||||
* ),
|
||||
* )
|
||||
*/
|
||||
public function manga(Request $request, int $id)
|
||||
{
|
||||
$results = Person::query()
|
||||
->where('mal_id', $id)
|
||||
->get();
|
||||
|
||||
if (
|
||||
$results->isEmpty()
|
||||
|| $this->isExpired($request, $results)
|
||||
) {
|
||||
$response = Person::scrape($id);
|
||||
|
||||
if (HttpHelper::hasError($response)) {
|
||||
return HttpResponse::notFound($request);
|
||||
}
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
$meta = [
|
||||
'createdAt' => new UTCDateTime(),
|
||||
'modifiedAt' => new UTCDateTime(),
|
||||
'request_hash' => $this->fingerprint
|
||||
];
|
||||
}
|
||||
$meta['modifiedAt'] = new UTCDateTime();
|
||||
|
||||
$response = $meta + $response;
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
Person::query()
|
||||
->insert($response);
|
||||
}
|
||||
|
||||
if ($this->isExpired($request, $results)) {
|
||||
Person::query()
|
||||
->where('mal_id', $id)
|
||||
->update($response);
|
||||
}
|
||||
|
||||
$results = Person::query()
|
||||
->where('mal_id', $id)
|
||||
->get();
|
||||
}
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
return HttpResponse::notFound($request);
|
||||
}
|
||||
|
||||
$response = (new PersonMangaCollection(
|
||||
$results->first()['published_manga']
|
||||
))->response();
|
||||
|
||||
return $this->prepareResponse(
|
||||
$response,
|
||||
$results,
|
||||
$request
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/people/{id}/pictures",
|
||||
|
32
app/Http/Resources/V4/PersonAnimeCollection.php
Normal file
32
app/Http/Resources/V4/PersonAnimeCollection.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Http\Resources\V4;
|
||||
|
||||
use Illuminate\Http\Resources\Json\ResourceCollection;
|
||||
|
||||
class PersonAnimeCollection extends ResourceCollection
|
||||
{
|
||||
|
||||
/**
|
||||
* The resource that this resource collects.
|
||||
|
||||
*/
|
||||
public $collects = 'App\Http\Resources\V4\PersonAnimeResource';
|
||||
|
||||
/**
|
||||
* Transform the resource collection into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'data' => $this->collection,
|
||||
'links' => [
|
||||
'self' => 'link-value',
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
28
app/Http/Resources/V4/PersonAnimeResource.php
Normal file
28
app/Http/Resources/V4/PersonAnimeResource.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\V4;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class PersonAnimeResource extends JsonResource
|
||||
{
|
||||
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'position' => $this['position'],
|
||||
'anime' => [
|
||||
'mal_id' => $this['anime']['mal_id'],
|
||||
'url' => $this['anime']['url'],
|
||||
'image_url' => $this['anime']['image_url'],
|
||||
'name' => $this['anime']['name']
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
32
app/Http/Resources/V4/PersonMangaCollection.php
Normal file
32
app/Http/Resources/V4/PersonMangaCollection.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Http\Resources\V4;
|
||||
|
||||
use Illuminate\Http\Resources\Json\ResourceCollection;
|
||||
|
||||
class PersonMangaCollection extends ResourceCollection
|
||||
{
|
||||
|
||||
/**
|
||||
* The resource that this resource collects.
|
||||
|
||||
*/
|
||||
public $collects = 'App\Http\Resources\V4\PersonMangaResource';
|
||||
|
||||
/**
|
||||
* Transform the resource collection into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'data' => $this->collection,
|
||||
'links' => [
|
||||
'self' => 'link-value',
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
28
app/Http/Resources/V4/PersonMangaResource.php
Normal file
28
app/Http/Resources/V4/PersonMangaResource.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\V4;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class PersonMangaResource extends JsonResource
|
||||
{
|
||||
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'position' => $this['position'],
|
||||
'manga' => [
|
||||
'mal_id' => $this['manga']['mal_id'],
|
||||
'url' => $this['manga']['url'],
|
||||
'image_url' => $this['manga']['image_url'],
|
||||
'name' => $this['manga']['name']
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
@ -165,10 +165,7 @@ class PersonResource extends JsonResource
|
||||
'alternate_names' => $this->alternate_names,
|
||||
'birthday' => $this->birthday,
|
||||
'favorites' => $this->favorites,
|
||||
'about' => $this->about,
|
||||
'voice_acting_roles' => $this->voice_acting_roles,
|
||||
'anime_staff_positions' => $this->anime_staff_positions,
|
||||
'published_manga' => $this->published_manga,
|
||||
'about' => $this->about
|
||||
];
|
||||
}
|
||||
}
|
34
app/Http/Resources/V4/PersonVoiceResource.php
Normal file
34
app/Http/Resources/V4/PersonVoiceResource.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\V4;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class PersonVoiceResource extends JsonResource
|
||||
{
|
||||
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'role' => $this['role'],
|
||||
'anime' => [
|
||||
'mal_id' => $this['anime']['mal_id'],
|
||||
'url' => $this['anime']['url'],
|
||||
'image_url' => $this['anime']['image_url'],
|
||||
'name' => $this['anime']['name']
|
||||
],
|
||||
'character' => [
|
||||
'mal_id' => $this['character']['mal_id'],
|
||||
'url' => $this['character']['url'],
|
||||
'image_url' => $this['character']['image_url'],
|
||||
'name' => $this['character']['name']
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
32
app/Http/Resources/V4/PersonVoicesCollection.php
Normal file
32
app/Http/Resources/V4/PersonVoicesCollection.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Http\Resources\V4;
|
||||
|
||||
use Illuminate\Http\Resources\Json\ResourceCollection;
|
||||
|
||||
class PersonVoicesCollection extends ResourceCollection
|
||||
{
|
||||
|
||||
/**
|
||||
* The resource that this resource collects.
|
||||
|
||||
*/
|
||||
public $collects = 'App\Http\Resources\V4\PersonVoiceResource';
|
||||
|
||||
/**
|
||||
* Transform the resource collection into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'data' => $this->collection,
|
||||
'links' => [
|
||||
'self' => 'link-value',
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
@ -165,6 +165,18 @@ $router->group(
|
||||
'uses' => 'PersonController@main'
|
||||
]);
|
||||
|
||||
$router->get('/anime', [
|
||||
'uses' => 'PersonController@anime'
|
||||
]);
|
||||
|
||||
$router->get('/voices', [
|
||||
'uses' => 'PersonController@voices'
|
||||
]);
|
||||
|
||||
$router->get('/manga', [
|
||||
'uses' => 'PersonController@manga'
|
||||
]);
|
||||
|
||||
$router->get('/pictures', [
|
||||
'uses' => 'PersonController@pictures'
|
||||
]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user