fixed issues with filtering

This commit is contained in:
pushrbx 2022-06-20 22:35:14 +01:00
parent b1ebf51c66
commit 66d2f5377a
6 changed files with 42 additions and 22 deletions

View File

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

View File

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

View File

@ -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.

View File

@ -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);
}

View File

@ -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.

View File

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