mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
Add query parameters to genres listing
This commit is contained in:
parent
d4254ad277
commit
ead5ec9c8e
@ -5,6 +5,7 @@ namespace App\Http\Controllers\V4DB;
|
||||
use App\Anime;
|
||||
use App\GenreAnime;
|
||||
use App\GenreManga;
|
||||
use App\Http\QueryBuilder\SearchQueryBuilderGenre;
|
||||
use App\Http\Resources\V4\AnimeCollection;
|
||||
use App\Http\Resources\V4\GenreCollection;
|
||||
use App\Http\Resources\V4\MangaCollection;
|
||||
@ -32,7 +33,10 @@ class GenreController extends Controller
|
||||
*/
|
||||
public function anime(Request $request)
|
||||
{
|
||||
$results = GenreAnime::query();
|
||||
$results = SearchQueryBuilderGenre::query(
|
||||
$request,
|
||||
GenreAnime::query()
|
||||
);
|
||||
|
||||
return new GenreCollection(
|
||||
$results->get()
|
||||
|
65
app/Http/QueryBuilder/SearchQueryBuilderGenre.php
Normal file
65
app/Http/QueryBuilder/SearchQueryBuilderGenre.php
Normal file
@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\QueryBuilder;
|
||||
|
||||
use App\Http\HttpHelper;
|
||||
use Illuminate\Http\Request;
|
||||
use Jenssegers\Mongodb\Eloquent\Builder;
|
||||
|
||||
|
||||
class SearchQueryBuilderGenre implements SearchQueryBuilderInterface
|
||||
{
|
||||
|
||||
const MAX_RESULTS_PER_PAGE = 25;
|
||||
|
||||
const ORDER_BY = [
|
||||
'mal_id', 'name', 'count'
|
||||
];
|
||||
|
||||
public static function query(Request $request, Builder $results) : Builder
|
||||
{
|
||||
$query = $request->get('q');
|
||||
$orderBy = $request->get('order_by');
|
||||
$sort = self::mapSort($request->get('sort'));
|
||||
$letter = $request->get('letter');
|
||||
|
||||
|
||||
if (!empty($query) && is_null($letter)) {
|
||||
|
||||
$results = $results
|
||||
->where('name', 'like', "%{$query}%");
|
||||
}
|
||||
|
||||
if (!is_null($letter)) {
|
||||
$results = $results
|
||||
->where('name', 'like', "{$letter}%");
|
||||
}
|
||||
|
||||
if (!is_null($orderBy)) {
|
||||
$results = $results
|
||||
->orderBy($orderBy, $sort ?? 'asc');
|
||||
}
|
||||
|
||||
if (empty($query)) {
|
||||
$results = $results
|
||||
->orderBy('mal_id');
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|null $sort
|
||||
* @return string|null
|
||||
*/
|
||||
public static function mapSort(?string $sort = null) : ?string
|
||||
{
|
||||
if (is_null($sort)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$sort = strtolower($sort);
|
||||
|
||||
return $sort === 'desc' ? 'desc' : 'asc';
|
||||
}
|
||||
}
|
@ -11,7 +11,7 @@ class SearchQueryBuilderMagazine implements SearchQueryBuilderInterface
|
||||
{
|
||||
|
||||
const ORDER_BY = [
|
||||
'mal_id', 'title', 'count'
|
||||
'mal_id', 'name', 'count'
|
||||
];
|
||||
|
||||
public static function query(Request $request, Builder $results) : Builder
|
||||
|
@ -13,7 +13,7 @@ class SearchQueryBuilderProducer implements SearchQueryBuilderInterface
|
||||
const MAX_RESULTS_PER_PAGE = 25;
|
||||
|
||||
const ORDER_BY = [
|
||||
'mal_id', 'title', 'count'
|
||||
'mal_id', 'name', 'count'
|
||||
];
|
||||
|
||||
public static function query(Request $request, Builder $results) : Builder
|
||||
|
@ -341,6 +341,7 @@ $router->group(
|
||||
'prefix' => 'genres'
|
||||
],
|
||||
function () use ($router) {
|
||||
|
||||
$router->get('/anime', [
|
||||
'uses' => 'GenreController@anime'
|
||||
]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user