add anime /themes endpoint

This commit is contained in:
Irfan 2020-11-26 23:35:29 +05:00
parent 92629a8c62
commit 6b9c6632d9
4 changed files with 108 additions and 1 deletions

View File

@ -13,6 +13,7 @@ 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\AnimeThemesResource;
use App\Http\Resources\V4\MoreInfoResource;
use App\Http\Resources\V4\AnimeNewsResource;
use App\Http\Resources\V4\PicturesResource;
@ -1036,4 +1037,87 @@ class AnimeController extends Controller
$request
);
}
/**
* @OA\Get(
* path="/anime/{id}/themes",
* operationId="getAnimeThemes",
* 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 themes(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 AnimeThemesResource(
$results->first()
))->response();
return $this->prepareResponse(
$response,
$results,
$request
);
}
}

View File

@ -289,7 +289,6 @@ class AnimeResource extends JsonResource
'licensors' => $this->licensors,
'studios' => $this->studios,
'genres' => $this->genres,
'themes' => $this->themes
];
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Http\Resources\V4;
use Illuminate\Http\Resources\Json\JsonResource;
class AnimeThemesResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return $this['themes'];
}
}

View File

@ -84,6 +84,10 @@ $router->group(
$router->get('/relations', [
'uses' => 'AnimeController@relations'
]);
$router->get('/themes', [
'uses' => 'AnimeController@themes'
]);
}
);