mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
Add anime /relations endpoint
This commit is contained in:
parent
4e6c9409ce
commit
92629a8c62
@ -11,6 +11,8 @@ use App\Http\Resources\V4\AnimeCollection;
|
||||
use App\Http\Resources\V4\AnimeEpisodeResource;
|
||||
use App\Http\Resources\V4\AnimeEpisodesResource;
|
||||
use App\Http\Resources\V4\AnimeForumResource;
|
||||
use App\Http\Resources\V4\AnimeRelationsCollection;
|
||||
use App\Http\Resources\V4\AnimeRelationsResource;
|
||||
use App\Http\Resources\V4\MoreInfoResource;
|
||||
use App\Http\Resources\V4\AnimeNewsResource;
|
||||
use App\Http\Resources\V4\PicturesResource;
|
||||
@ -900,14 +902,14 @@ class AnimeController extends Controller
|
||||
* path="/anime/{id}/reviews",
|
||||
* operationId="getAnimeReviews",
|
||||
* tags={"anime"},
|
||||
*
|
||||
*
|
||||
* @OA\Parameter(
|
||||
* name="id",
|
||||
* in="path",
|
||||
* required=true,
|
||||
* @OA\Schema(type="integer")
|
||||
* ),
|
||||
*
|
||||
*
|
||||
* @OA\Parameter(ref="#/components/parameters/page"),
|
||||
*
|
||||
* @OA\Response(
|
||||
@ -950,4 +952,88 @@ class AnimeController extends Controller
|
||||
$request
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/anime/{id}/relations",
|
||||
* operationId="getAnimeRelations",
|
||||
* tags={"anime"},
|
||||
*
|
||||
* @OA\Parameter(
|
||||
* name="id",
|
||||
* in="path",
|
||||
* required=true,
|
||||
* @OA\Schema(type="integer")
|
||||
* ),
|
||||
*
|
||||
* @OA\Parameter(ref="#/components/parameters/page"),
|
||||
*
|
||||
* @OA\Response(
|
||||
* response="200",
|
||||
* description="Returns anime relations",
|
||||
* @OA\JsonContent(
|
||||
* ref="#/components/schemas/anime reviews"
|
||||
* )
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response="400",
|
||||
* description="Error: Bad request. When required parameters were not supplied.",
|
||||
* ),
|
||||
* )
|
||||
*/
|
||||
public function relations(Request $request, int $id)
|
||||
{
|
||||
$results = Anime::query()
|
||||
->where('mal_id', $id)
|
||||
->get();
|
||||
|
||||
if (
|
||||
$results->isEmpty()
|
||||
|| $this->isExpired($request, $results)
|
||||
) {
|
||||
$response = Anime::scrape($id);
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
$meta = [
|
||||
'createdAt' => new UTCDateTime(),
|
||||
'modifiedAt' => new UTCDateTime(),
|
||||
'request_hash' => $this->fingerprint
|
||||
];
|
||||
}
|
||||
$meta['modifiedAt'] = new UTCDateTime();
|
||||
|
||||
$response = $meta + $response;
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
Anime::query()
|
||||
->insert($response);
|
||||
}
|
||||
|
||||
if ($this->isExpired($request, $results)) {
|
||||
Anime::query()
|
||||
->where('mal_id', $id)
|
||||
->update($response);
|
||||
}
|
||||
|
||||
$results = Anime::query()
|
||||
->where('mal_id', $id)
|
||||
->get();
|
||||
}
|
||||
|
||||
if ($results->isEmpty()) {
|
||||
return HttpResponse::notFound($request);
|
||||
}
|
||||
|
||||
|
||||
$response = (new AnimeRelationsResource(
|
||||
$results->first()
|
||||
))->response();
|
||||
|
||||
return $this->prepareResponse(
|
||||
$response,
|
||||
$results,
|
||||
$request
|
||||
);
|
||||
}
|
||||
}
|
||||
|
20
app/Http/Resources/V4/AnimeRelationsResource.php
Normal file
20
app/Http/Resources/V4/AnimeRelationsResource.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\V4;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class AnimeRelationsResource extends JsonResource
|
||||
{
|
||||
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return $this['related'];
|
||||
}
|
||||
}
|
@ -285,7 +285,6 @@ class AnimeResource extends JsonResource
|
||||
'season' => $this->season,
|
||||
'year' => $this->year,
|
||||
'broadcast' => $this->broadcast,
|
||||
'related' => $this->related,
|
||||
'producers' => $this->producers,
|
||||
'licensors' => $this->licensors,
|
||||
'studios' => $this->studios,
|
||||
|
@ -80,6 +80,10 @@ $router->group(
|
||||
$router->get('/reviews', [
|
||||
'uses' => 'AnimeController@reviews'
|
||||
]);
|
||||
|
||||
$router->get('/relations', [
|
||||
'uses' => 'AnimeController@relations'
|
||||
]);
|
||||
}
|
||||
);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user