mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
add anime videos episodes + pagination
This commit is contained in:
parent
6f41f4e93a
commit
78d0759611
@ -44,6 +44,7 @@ use Jikan\Request\Anime\AnimeRecommendationsRequest;
|
||||
use Jikan\Request\Anime\AnimeRequest;
|
||||
use Jikan\Request\Anime\AnimeReviewsRequest;
|
||||
use Jikan\Request\Anime\AnimeStatsRequest;
|
||||
use Jikan\Request\Anime\AnimeVideosEpisodesRequest;
|
||||
use Jikan\Request\Anime\AnimeVideosRequest;
|
||||
use Laravel\Lumen\Http\ResponseFactory;
|
||||
use MongoDB\BSON\UTCDateTime;
|
||||
@ -713,6 +714,106 @@ class AnimeController extends Controller
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/anime/{id}/videos/episodes",
|
||||
* operationId="getAnimeVideosEpisodes",
|
||||
* 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 videos related to the entry",
|
||||
* @OA\JsonContent(
|
||||
* ref="#/components/schemas/anime_videos_episodes"
|
||||
* )
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response="400",
|
||||
* description="Error: Bad request. When required parameters were not supplied.",
|
||||
* ),
|
||||
*
|
||||
*
|
||||
* @OA\Schema(
|
||||
* schema="anime_videos_episodes",
|
||||
* description="Anime Videos Episodes Resource",
|
||||
*
|
||||
* allOf={
|
||||
* @OA\Schema(ref="#/components/schemas/pagination"),
|
||||
* @OA\Schema(
|
||||
* @OA\Property(
|
||||
* property="data",
|
||||
* type="array",
|
||||
* @OA\Items(
|
||||
* type="object",
|
||||
* @OA\Property(
|
||||
* property="mal_id",
|
||||
* type="integer",
|
||||
* description="MyAnimeList ID or Episode Number"
|
||||
* ),
|
||||
* @OA\Property(
|
||||
* property="title",
|
||||
* type="string",
|
||||
* description="Episode Title"
|
||||
* ),
|
||||
* @OA\Property(
|
||||
* property="episode",
|
||||
* type="string",
|
||||
* description="Episode Subtitle"
|
||||
* ),
|
||||
* @OA\Property(
|
||||
* property="url",
|
||||
* type="string",
|
||||
* description="Episode Page URL",
|
||||
* ),
|
||||
* @OA\Property(
|
||||
* property="images",
|
||||
* ref="#/components/schemas/common_images"
|
||||
* ),
|
||||
* ),
|
||||
* ),
|
||||
* ),
|
||||
* }
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function videosEpisodes(Request $request, int $id)
|
||||
{
|
||||
$results = DB::table($this->getRouteTable($request))
|
||||
->where('request_hash', $this->fingerprint)
|
||||
->get();
|
||||
|
||||
|
||||
if (
|
||||
$results->isEmpty()
|
||||
|| $this->isExpired($request, $results)
|
||||
) {
|
||||
$page = $request->get('page') ?? 1;
|
||||
$anime = $this->jikan->getAnimeVideosEpisodes(new AnimeVideosEpisodesRequest($id, $page));
|
||||
$response = \json_decode($this->serializer->serialize($anime, 'json'), true);
|
||||
|
||||
$results = $this->updateCache($request, $results, $response);
|
||||
}
|
||||
|
||||
$response = (new AnimeEpisodesResource(
|
||||
$results->first()
|
||||
))->response();
|
||||
|
||||
return $this->prepareResponse(
|
||||
$response,
|
||||
$results,
|
||||
$request
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/anime/{id}/pictures",
|
||||
|
@ -15,9 +15,11 @@ class AnimeEpisodesResource extends JsonResource
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'last_visible_page' => $this['last_visible_page'] ?? 1,
|
||||
'has_next_page' => $this['has_next_page'] ?? false,
|
||||
'results' => $this['results']
|
||||
'pagination' => [
|
||||
'last_visible_page' => $this['last_visible_page'] ?? 1,
|
||||
'has_next_page' => $this['has_next_page'] ?? false,
|
||||
],
|
||||
'data' => $this['results'],
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,10 @@ return [
|
||||
'table_name' => 'anime_videos',
|
||||
'ttl' => env('CACHE_DEFAULT_EXPIRE')
|
||||
],
|
||||
'AnimeController@videosEpisodes' => [
|
||||
'table_name' => 'anime_videos_episodes',
|
||||
'ttl' => env('CACHE_DEFAULT_EXPIRE')
|
||||
],
|
||||
'AnimeController@pictures' => [
|
||||
'table_name' => 'anime_pictures',
|
||||
'ttl' => env('CACHE_DEFAULT_EXPIRE')
|
||||
@ -378,4 +382,4 @@ return [
|
||||
'ttl' => env('CACHE_DEFAULT_EXPIRE')
|
||||
],
|
||||
|
||||
];
|
||||
];
|
||||
|
@ -67,6 +67,10 @@ $router->group(
|
||||
'uses' => 'AnimeController@videos'
|
||||
]);
|
||||
|
||||
$router->get('/videos/episodes', [
|
||||
'uses' => 'AnimeController@videosEpisodes'
|
||||
]);
|
||||
|
||||
$router->get('/pictures', [
|
||||
'uses' => 'AnimeController@pictures'
|
||||
]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user