mirror of
https://github.com/AnimeThemes/animethemes-server.git
synced 2026-07-11 01:24:46 +02:00
feat(graphql): add support for sorting on search (#1190)
This commit is contained in:
@@ -6,15 +6,19 @@ namespace App\GraphQL\Directives;
|
||||
|
||||
use App\Contracts\GraphQL\EnumSort;
|
||||
use App\Enums\Http\Api\Field\AggregateFunction;
|
||||
use App\GraphQL\Sort\FieldSortCriteria;
|
||||
use GraphQL\Error\Error;
|
||||
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
|
||||
use Illuminate\Database\Eloquent\Relations\Relation;
|
||||
use Illuminate\Database\Query\Builder as QueryBuilder;
|
||||
use Laravel\Scout\Builder as ScoutBuilder;
|
||||
use Nuwave\Lighthouse\Schema\Directives\BaseDirective;
|
||||
use Nuwave\Lighthouse\Scout\ScoutBuilderDirective;
|
||||
use Nuwave\Lighthouse\Support\Contracts\ArgBuilderDirective;
|
||||
use Nuwave\Lighthouse\Support\Contracts\ArgDirective;
|
||||
use UnitEnum;
|
||||
|
||||
class SortDirective extends BaseDirective implements ArgBuilderDirective, ArgDirective
|
||||
class SortDirective extends BaseDirective implements ArgBuilderDirective, ArgDirective, ScoutBuilderDirective
|
||||
{
|
||||
public static function definition(): string
|
||||
{
|
||||
@@ -48,4 +52,23 @@ GRAPHQL;
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify the scout builder with a client given value.
|
||||
*
|
||||
* @param array<int, UnitEnum&EnumSort> $value the client given value of the argument
|
||||
*/
|
||||
public function handleScoutBuilder(ScoutBuilder $builder, mixed $value): ScoutBuilder
|
||||
{
|
||||
foreach ($value as $sort) {
|
||||
$criteria = $sort->getSortCriteria();
|
||||
|
||||
match (true) {
|
||||
$criteria instanceof FieldSortCriteria => $builder->orderBy($criteria->getColumn(), $criteria->getDirection()->value),
|
||||
default => throw new Error('Sorting by this value is not supported when using the \'search\' parameter.'),
|
||||
};
|
||||
}
|
||||
|
||||
return $builder;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user