add manga /relations endpoint

This commit is contained in:
Irfan 2020-11-26 23:40:31 +05:00
parent 6b9c6632d9
commit c0323669d2
5 changed files with 109 additions and 2 deletions

View File

@ -1055,7 +1055,7 @@ class AnimeController extends Controller
*
* @OA\Response(
* response="200",
* description="Returns anime relations",
* description="Returns anime themes",
* @OA\JsonContent(
* ref="#/components/schemas/anime reviews"
* )

View File

@ -7,6 +7,7 @@ use App\Http\HttpHelper;
use App\Http\HttpResponse;
use App\Http\Resources\V4\AnimeCharactersResource;
use App\Http\Resources\V4\AnimeForumResource;
use App\Http\Resources\V4\MangaRelationsResource;
use App\Http\Resources\V4\ResultsResource;
use App\Http\Resources\V4\ReviewsResource;
use App\Http\Resources\V4\UserUpdatesResource;
@ -574,4 +575,87 @@ class MangaController extends Controller
$request
);
}
/**
* @OA\Get(
* path="/manga/{id}/relations",
* operationId="getMangaRelations",
* tags={"manga"},
*
* @OA\Parameter(
* name="id",
* in="path",
* required=true,
* @OA\Schema(type="integer")
* ),
*
* @OA\Parameter(ref="#/components/parameters/page"),
*
* @OA\Response(
* response="200",
* description="Returns manga relations",
* @OA\JsonContent(
* ref="#/components/schemas/manga reviews"
* )
* ),
* @OA\Response(
* response="400",
* description="Error: Bad request. When required parameters were not supplied.",
* ),
* )
*/
public function relations(Request $request, int $id)
{
$results = Manga::query()
->where('mal_id', $id)
->get();
if (
$results->isEmpty()
|| $this->isExpired($request, $results)
) {
$response = Manga::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()) {
Manga::query()
->insert($response);
}
if ($this->isExpired($request, $results)) {
Manga::query()
->where('mal_id', $id)
->update($response);
}
$results = Manga::query()
->where('mal_id', $id)
->get();
}
if ($results->isEmpty()) {
return HttpResponse::notFound($request);
}
$response = (new MangaRelationsResource(
$results->first()
))->response();
return $this->prepareResponse(
$response,
$results,
$request
);
}
}

View File

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

View File

@ -223,7 +223,6 @@ class MangaResource extends JsonResource
'favorites' => $this->favorites,
'synopsis' => $this->synopsis,
'background' => $this->background,
'related' => $this->related,
'authors' => $this->authors,
'serializations' => $this->serializations,
'genres' => $this->genres,

View File

@ -139,6 +139,10 @@ $router->group(
$router->get('/reviews', [
'uses' => 'MangaController@reviews'
]);
$router->get('/relations', [
'uses' => 'MangaController@relations'
]);
}
);