mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
fixed issues with filtering
This commit is contained in:
parent
b1ebf51c66
commit
66d2f5377a
@ -10,7 +10,7 @@ class Anime extends JikanApiSearchableModel
|
||||
{
|
||||
// note that here we skip "score", "min_score", "max_score", "rating" and others because they need special logic
|
||||
// to set the correct filtering on the ORM.
|
||||
protected array $filters = ["order_by", "status", "type"];
|
||||
protected array $filters = ["order_by", "status", "type", "sort"];
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
@ -143,7 +143,7 @@ class Anime extends JikanApiSearchableModel
|
||||
'start_date' => $this->convertToTimestamp($this->aired['from']),
|
||||
'end_date' => $this->convertToTimestamp($this->aired['to']),
|
||||
'title' => $this->title,
|
||||
'title_english' => $this->title_english,
|
||||
'title_english' => $this->title_english ?? "",
|
||||
'title_japanese' => $this->title_japanese,
|
||||
'title_synonyms' => $this->title_synonyms,
|
||||
'type' => $this->type,
|
||||
@ -178,8 +178,31 @@ class Anime extends JikanApiSearchableModel
|
||||
return [
|
||||
'title',
|
||||
'title_english',
|
||||
'title_japanese',
|
||||
'title_synonyms'
|
||||
'title_japanese'
|
||||
];
|
||||
}
|
||||
|
||||
public function getTypeSenseQueryByWeights(): string|null
|
||||
{
|
||||
// this way title_synonyms will rank lower in search results
|
||||
return "1,2,1";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns which fields the search index should sort on when searching
|
||||
* @return array|null
|
||||
*/
|
||||
public function getSearchIndexSortBy(): array|null
|
||||
{
|
||||
return [
|
||||
[
|
||||
"field" => "popularity",
|
||||
"direction" => "asc"
|
||||
],
|
||||
[
|
||||
"field" => "_text_match",
|
||||
"direction" => "desc"
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ use Jikan\Request\Character\CharacterRequest;
|
||||
|
||||
class Character extends JikanApiSearchableModel
|
||||
{
|
||||
protected array $filters = ["order_by"];
|
||||
protected array $filters = ["order_by", "sort"];
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
@ -74,4 +74,4 @@ class Character extends JikanApiSearchableModel
|
||||
'name_kanji'
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ use Jikan\Request\Club\ClubRequest;
|
||||
|
||||
class Club extends JikanApiSearchableModel
|
||||
{
|
||||
protected array $filters = ["order_by"];
|
||||
protected array $filters = ["order_by", "sort"];
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
|
@ -11,13 +11,14 @@ trait FilterQueryString
|
||||
|
||||
private array $availableFilters = [
|
||||
'default' => WhereClause::class,
|
||||
'order_by' => OrderbyClause::class
|
||||
'order_by' => OrderbyClause::class,
|
||||
'sort' => OrderbyClause::class
|
||||
];
|
||||
|
||||
/** @noinspection PhpUnused */
|
||||
public function scopeFilter(Builder $query, Collection $queryParameters, ...$filters)
|
||||
public function scopeFilter(Builder $query, Collection $queryParameters)
|
||||
{
|
||||
$filters = collect($this->getFilters($queryParameters, $filters))->map(function ($values, $filter) {
|
||||
$filters = $this->getFilters($queryParameters)->map(function ($values, $filter) {
|
||||
return $this->resolve($filter, $values);
|
||||
})->toArray();
|
||||
|
||||
@ -40,17 +41,18 @@ trait FilterQueryString
|
||||
return $filters;
|
||||
}
|
||||
|
||||
private function getFilters(Collection $queryParameters, array $filters): Collection
|
||||
private function getFilters(Collection $queryParameters): Collection
|
||||
{
|
||||
$filter = function ($key) use($filters) {
|
||||
$filter = function ($key) {
|
||||
|
||||
$filters = $filters ?: $this->filters ?: [];
|
||||
$filters = $this->filters ?: [];
|
||||
|
||||
// if model class sets the "unguardFilters" variable to true, then we skip the filter validation
|
||||
return !($this->unguardFilters != true) || in_array($key, $filters);
|
||||
};
|
||||
|
||||
$result = $queryParameters->filter($filter) ?? Collection::empty();
|
||||
$result = collect(array_filter($queryParameters->all(), $filter, ARRAY_FILTER_USE_KEY))
|
||||
->filter(fn ($v, $k) => !is_null($v)) ?? Collection::empty();
|
||||
|
||||
return $this->_normalizeOrderBy($result);
|
||||
}
|
||||
|
@ -3,19 +3,14 @@
|
||||
namespace App;
|
||||
|
||||
use App\Http\HttpHelper;
|
||||
use Jenssegers\Mongodb\Eloquent\Model;
|
||||
use Jikan\Helper\Media;
|
||||
use Jikan\Helper\Parser;
|
||||
use Jikan\Jikan;
|
||||
use Jikan\Model\Common\YoutubeMeta;
|
||||
use Jikan\Request\Anime\AnimeRequest;
|
||||
use Jikan\Request\Manga\MangaRequest;
|
||||
|
||||
class Manga extends JikanApiSearchableModel
|
||||
{
|
||||
// note that here we skip "score", "min_score", "max_score", "rating" and others because they need special logic
|
||||
// to set the correct filtering on the ORM.
|
||||
protected array $filters = ["order_by", "status", "type"];
|
||||
protected array $filters = ["order_by", "status", "type", "sort"];
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
|
@ -70,7 +70,7 @@ class Person extends JikanApiSearchableModel
|
||||
'name' => $this->name,
|
||||
'given_name' => $this->given_name,
|
||||
'family_name' => $this->family_name,
|
||||
'alternative_names' => $this->alternative_names
|
||||
'alternate_names' => $this->alternate_names
|
||||
];
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ class Person extends JikanApiSearchableModel
|
||||
"name",
|
||||
"given_name",
|
||||
"family_name",
|
||||
"alternative_names"
|
||||
"alternate_names"
|
||||
];
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user