add anime videos episodes + pagination

This commit is contained in:
Irfan 2022-07-27 21:50:21 +05:00
parent 6f41f4e93a
commit 78d0759611
4 changed files with 116 additions and 5 deletions

View File

@ -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",

View File

@ -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'],
];
}
}
}

View File

@ -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')
],
];
];

View File

@ -67,6 +67,10 @@ $router->group(
'uses' => 'AnimeController@videos'
]);
$router->get('/videos/episodes', [
'uses' => 'AnimeController@videosEpisodes'
]);
$router->get('/pictures', [
'uses' => 'AnimeController@pictures'
]);