From b1de2d04cb472337168fb0569ef95ec5c8805052 Mon Sep 17 00:00:00 2001 From: Aleksei Lebedev <1329824+LastDragon-ru@users.noreply.github.com> Date: Tue, 9 Jan 2024 19:15:25 +0400 Subject: [PATCH 1/8] Context support for `Handler`. --- packages/graphql/src/Builder/Context.php | 41 +++++++++++++++++++ .../graphql/src/Builder/Contracts/Context.php | 21 ++++++++++ .../graphql/src/Builder/Contracts/Handler.php | 2 +- .../src/Builder/Contracts/Operator.php | 8 +++- .../Builder/Directives/HandlerDirective.php | 24 ++++++++--- .../Builder/Directives/PropertyDirective.php | 11 ++++- .../graphql/src/Builder/ManipulatorTest.php | 25 +++++++++-- .../graphql/src/Builder/OperatorsTest.php | 9 +++- .../src/SearchBy/Directives/Directive.php | 5 ++- .../src/SearchBy/Directives/DirectiveTest.php | 2 + .../SearchBy/Operators/Comparison/Between.php | 9 +++- .../Operators/Comparison/BetweenTest.php | 4 +- .../Operators/Comparison/BitwiseAnd.php | 9 +++- .../Operators/Comparison/BitwiseAndTest.php | 4 +- .../Operators/Comparison/BitwiseLeftShift.php | 9 +++- .../Comparison/BitwiseLeftShiftTest.php | 4 +- .../Operators/Comparison/BitwiseOr.php | 9 +++- .../Operators/Comparison/BitwiseOrTest.php | 4 +- .../Comparison/BitwiseRightShift.php | 9 +++- .../Comparison/BitwiseRightShiftTest.php | 4 +- .../Operators/Comparison/BitwiseXor.php | 9 +++- .../Operators/Comparison/BitwiseXorTest.php | 4 +- .../Operators/Comparison/Contains.php | 9 +++- .../Operators/Comparison/ContainsTest.php | 4 +- .../Operators/Comparison/EndsWithTest.php | 4 +- .../SearchBy/Operators/Comparison/Equal.php | 9 +++- .../Operators/Comparison/EqualTest.php | 7 +++- .../Operators/Comparison/GreaterThan.php | 9 +++- .../Comparison/GreaterThanOrEqual.php | 9 +++- .../Comparison/GreaterThanOrEqualTest.php | 4 +- .../Operators/Comparison/GreaterThanTest.php | 4 +- .../src/SearchBy/Operators/Comparison/In.php | 9 +++- .../SearchBy/Operators/Comparison/InTest.php | 7 +++- .../Operators/Comparison/IsNotNull.php | 9 +++- .../Operators/Comparison/IsNotNullTest.php | 4 +- .../SearchBy/Operators/Comparison/IsNull.php | 9 +++- .../Operators/Comparison/IsNullTest.php | 4 +- .../Operators/Comparison/LessThan.php | 9 +++- .../Operators/Comparison/LessThanOrEqual.php | 9 +++- .../Comparison/LessThanOrEqualTest.php | 4 +- .../Operators/Comparison/LessThanTest.php | 4 +- .../SearchBy/Operators/Comparison/Like.php | 9 +++- .../Operators/Comparison/LikeTest.php | 4 +- .../Operators/Comparison/NotBetween.php | 9 +++- .../Operators/Comparison/NotBetweenTest.php | 4 +- .../Operators/Comparison/NotContainsTest.php | 4 +- .../Operators/Comparison/NotEndsWithTest.php | 4 +- .../Operators/Comparison/NotEqual.php | 9 +++- .../Operators/Comparison/NotEqualTest.php | 4 +- .../SearchBy/Operators/Comparison/NotIn.php | 9 +++- .../Operators/Comparison/NotInTest.php | 7 +++- .../SearchBy/Operators/Comparison/NotLike.php | 9 +++- .../Operators/Comparison/NotLikeTest.php | 4 +- .../Comparison/NotStartsWithTest.php | 4 +- .../Operators/Comparison/StartsWithTest.php | 4 +- .../SearchBy/Operators/Complex/Relation.php | 15 +++++-- .../Operators/Complex/RelationTest.php | 4 +- .../src/SearchBy/Operators/Logical/AllOf.php | 13 ++++-- .../SearchBy/Operators/Logical/AllOfTest.php | 7 +++- .../SearchBy/Operators/Logical/AnyOfTest.php | 4 +- .../SearchBy/Operators/Logical/Logical.php | 16 ++++++-- .../SearchBy/Operators/Logical/NotTest.php | 4 +- .../src/SortBy/Operators/Extra/Random.php | 9 +++- .../src/SortBy/Operators/Extra/RandomTest.php | 4 +- .../graphql/src/SortBy/Operators/Field.php | 9 +++- .../src/SortBy/Operators/FieldTest.php | 13 ++++-- 66 files changed, 448 insertions(+), 87 deletions(-) create mode 100644 packages/graphql/src/Builder/Context.php create mode 100644 packages/graphql/src/Builder/Contracts/Context.php diff --git a/packages/graphql/src/Builder/Context.php b/packages/graphql/src/Builder/Context.php new file mode 100644 index 000000000..6d3c6c076 --- /dev/null +++ b/packages/graphql/src/Builder/Context.php @@ -0,0 +1,41 @@ + + */ + private array $context = []; + + public function __construct() { + // empty + } + + #[Override] + public function get(string $key): mixed { + return isset($this->context[$key]) && $this->context[$key] instanceof $key + ? $this->context[$key] + : null; + } + + /** + * @inheritDoc + */ + #[Override] + public function override(array $context): static { + $overridden = clone $this; + + foreach ($context as $key => $value) { + $overridden->context[$key] = $value; + } + + return $overridden; + } +} diff --git a/packages/graphql/src/Builder/Contracts/Context.php b/packages/graphql/src/Builder/Contracts/Context.php new file mode 100644 index 000000000..c3e8de7ee --- /dev/null +++ b/packages/graphql/src/Builder/Contracts/Context.php @@ -0,0 +1,21 @@ + $key + * + * @return T|null + */ + public function get(string $key): mixed; + + /** + * @template T of object + * + * @param array, T|null> $context + */ + public function override(array $context): static; +} diff --git a/packages/graphql/src/Builder/Contracts/Handler.php b/packages/graphql/src/Builder/Contracts/Handler.php index 979d9edb8..69f7abc8d 100644 --- a/packages/graphql/src/Builder/Contracts/Handler.php +++ b/packages/graphql/src/Builder/Contracts/Handler.php @@ -13,5 +13,5 @@ interface Handler { * * @return TBuilder */ - public function handle(object $builder, Property $property, ArgumentSet $conditions): object; + public function handle(Context $context, object $builder, Property $property, ArgumentSet $conditions): object; } diff --git a/packages/graphql/src/Builder/Contracts/Operator.php b/packages/graphql/src/Builder/Contracts/Operator.php index aea1ec638..5159810e9 100644 --- a/packages/graphql/src/Builder/Contracts/Operator.php +++ b/packages/graphql/src/Builder/Contracts/Operator.php @@ -31,5 +31,11 @@ public function isBuilderSupported(string $builder): bool; * * @return TBuilder */ - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object; + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object; } diff --git a/packages/graphql/src/Builder/Directives/HandlerDirective.php b/packages/graphql/src/Builder/Directives/HandlerDirective.php index 04f29b722..4c1d954cf 100644 --- a/packages/graphql/src/Builder/Directives/HandlerDirective.php +++ b/packages/graphql/src/Builder/Directives/HandlerDirective.php @@ -16,6 +16,8 @@ use Illuminate\Database\Query\Builder as QueryBuilder; use Laravel\Scout\Builder as ScoutBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\BuilderInfoDetector; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context as ContextContract; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scope; @@ -87,7 +89,7 @@ public function handleScoutBuilder(ScoutBuilder $builder, mixed $value): ScoutBu * * @return T */ - protected function handleAnyBuilder(object $builder, mixed $value): object { + protected function handleAnyBuilder(object $builder, mixed $value, ContextContract $context = null): object { if ($value !== null && $this->definitionNode instanceof InputValueDefinitionNode) { $argument = !($value instanceof Argument) ? $this->getFactory()->getArgument($this->definitionNode, $value) @@ -99,7 +101,7 @@ protected function handleAnyBuilder(object $builder, mixed $value): object { foreach ($conditions as $condition) { if ($condition instanceof ArgumentSet) { - $builder = $this->handle($builder, new Property(), $condition); + $builder = $this->handle($context ?? new Context(), $builder, new Property(), $condition); } else { throw new HandlerInvalidConditions($this); } @@ -117,7 +119,12 @@ protected function handleAnyBuilder(object $builder, mixed $value): object { * @return T */ #[Override] - public function handle(object $builder, Property $property, ArgumentSet $conditions): object { + public function handle( + ContextContract $context, + object $builder, + Property $property, + ArgumentSet $conditions, + ): object { // Empty? if (count($conditions->arguments) === 0) { return $builder; @@ -131,7 +138,7 @@ public function handle(object $builder, Property $property, ArgumentSet $conditi } // Call - return $this->call($builder, $property, $conditions); + return $this->call($context, $builder, $property, $conditions); } /** @@ -141,7 +148,12 @@ public function handle(object $builder, Property $property, ArgumentSet $conditi * * @return T */ - protected function call(object $builder, Property $property, ArgumentSet $operator): object { + protected function call( + ContextContract $context, + object $builder, + Property $property, + ArgumentSet $operator, + ): object { // Arguments? if (count($operator->arguments) > 1) { throw new ConditionTooManyOperators( @@ -184,7 +196,7 @@ static function (Operator $operator): string { } // Return - return $op->call($this, $builder, $property, $value); + return $op->call($this, $context, $builder, $property, $value); } // diff --git a/packages/graphql/src/Builder/Directives/PropertyDirective.php b/packages/graphql/src/Builder/Directives/PropertyDirective.php index ac0b89ffd..4bd0e2ee4 100644 --- a/packages/graphql/src/Builder/Directives/PropertyDirective.php +++ b/packages/graphql/src/Builder/Directives/PropertyDirective.php @@ -2,6 +2,7 @@ namespace LastDragon_ru\LaraASP\GraphQL\Builder\Directives; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -33,7 +34,13 @@ public function isBuilderSupported(string $builder): bool { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($argument->value instanceof ArgumentSet)) { throw new HandlerInvalidConditions($handler); } @@ -51,6 +58,6 @@ public function call(Handler $handler, object $builder, Property $property, Argu } // Apply - return $handler->handle($builder, $property, $argument->value); + return $handler->handle($context, $builder, $property, $argument->value); } } diff --git a/packages/graphql/src/Builder/ManipulatorTest.php b/packages/graphql/src/Builder/ManipulatorTest.php index a506402d2..81771454f 100644 --- a/packages/graphql/src/Builder/ManipulatorTest.php +++ b/packages/graphql/src/Builder/ManipulatorTest.php @@ -5,6 +5,7 @@ use GraphQL\Type\Definition\CustomScalarType; use GraphQL\Type\Definition\ObjectType; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scope; @@ -395,7 +396,13 @@ public function isBuilderSupported(string $builder): bool { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { return $builder; } } @@ -426,7 +433,13 @@ public function isBuilderSupported(string $builder): bool { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { return $builder; } } @@ -457,7 +470,13 @@ public function isBuilderSupported(string $builder): bool { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { return $builder; } } diff --git a/packages/graphql/src/Builder/OperatorsTest.php b/packages/graphql/src/Builder/OperatorsTest.php index 43896df8d..0f331e5d6 100644 --- a/packages/graphql/src/Builder/OperatorsTest.php +++ b/packages/graphql/src/Builder/OperatorsTest.php @@ -3,6 +3,7 @@ namespace LastDragon_ru\LaraASP\GraphQL\Builder; use Exception; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scope; @@ -183,7 +184,13 @@ public function isBuilderSupported(string $builder): bool { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { throw new Exception('Should not be called'); } } diff --git a/packages/graphql/src/SearchBy/Directives/Directive.php b/packages/graphql/src/SearchBy/Directives/Directive.php index 2dc7ff5db..5686f4748 100644 --- a/packages/graphql/src/SearchBy/Directives/Directive.php +++ b/packages/graphql/src/SearchBy/Directives/Directive.php @@ -6,6 +6,7 @@ use GraphQL\Language\AST\NamedTypeNode; use GraphQL\Language\AST\NonNullTypeNode; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Directives\HandlerDirective; use LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -78,7 +79,7 @@ protected function getArgDefinitionType( // // ========================================================================= #[Override] - public function handle(object $builder, Property $property, ArgumentSet $conditions): object { + public function handle(Context $context, object $builder, Property $property, ArgumentSet $conditions): object { // Some relations (eg `HasManyThrough`) require a table name prefix to // avoid "SQLSTATE[23000]: Integrity constraint violation: 1052 Column // 'xxx' in where clause is ambiguous" error. @@ -87,7 +88,7 @@ public function handle(object $builder, Property $property, ArgumentSet $conditi } // Return - return parent::handle($builder, $property, $conditions); + return parent::handle($context, $builder, $property, $conditions); } // } diff --git a/packages/graphql/src/SearchBy/Directives/DirectiveTest.php b/packages/graphql/src/SearchBy/Directives/DirectiveTest.php index 499608faf..14cce9360 100644 --- a/packages/graphql/src/SearchBy/Directives/DirectiveTest.php +++ b/packages/graphql/src/SearchBy/Directives/DirectiveTest.php @@ -18,6 +18,7 @@ use Illuminate\Database\Query\Builder as QueryBuilder; use Illuminate\Support\Str; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; @@ -429,6 +430,7 @@ public static function definition(): string { #[Override] public function call( Handler $handler, + Context $context, object $builder, Property $property, Argument $argument, diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/Between.php b/packages/graphql/src/SearchBy/Operators/Comparison/Between.php index c50005cab..7dd987580 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/Between.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/Between.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; use LastDragon_ru\LaraASP\Core\Utils\Cast; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -32,7 +33,13 @@ public function getFieldType(TypeProvider $provider, TypeSource $source): string } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BetweenTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BetweenTest.php index 796640c89..c6820f1ff 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BetweenTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BetweenTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(Between::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAnd.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAnd.php index 911698134..19bf0fffa 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAnd.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAnd.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -23,7 +24,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAndTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAndTest.php index 6740cbf5a..eb2864eae 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAndTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAndTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(BitwiseAnd::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShift.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShift.php index e79c072af..569ff9437 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShift.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShift.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -23,7 +24,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShiftTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShiftTest.php index 6cac1f54f..bc13edeb7 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShiftTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShiftTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(BitwiseLeftShift::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOr.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOr.php index 4c015e8de..abd014bd5 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOr.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOr.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -23,7 +24,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOrTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOrTest.php index 00c812c33..01aca7b54 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOrTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOrTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(BitwiseOr::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShift.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShift.php index 71b696ce2..c4db3f649 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShift.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShift.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -23,7 +24,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShiftTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShiftTest.php index da5379818..05c9d7451 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShiftTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShiftTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(BitwiseRightShift::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXor.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXor.php index 9d84c5d2b..9bc7af80b 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXor.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXor.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -23,7 +24,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXorTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXorTest.php index 04d098636..f22afcf8f 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXorTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXorTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(BitwiseXor::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/Contains.php b/packages/graphql/src/SearchBy/Operators/Comparison/Contains.php index 28d422c6f..0ae3c8820 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/Contains.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/Contains.php @@ -7,6 +7,7 @@ use Illuminate\Database\Query\Builder as QueryBuilder; use Illuminate\Database\Query\Grammars\SqlServerGrammar; use LastDragon_ru\LaraASP\Core\Utils\Cast; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -28,7 +29,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/ContainsTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/ContainsTest.php index b6f36538d..5b383c78b 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/ContainsTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/ContainsTest.php @@ -10,6 +10,7 @@ use Illuminate\Database\Query\Grammars\PostgresGrammar; use Illuminate\Database\Query\Grammars\SQLiteGrammar; use Illuminate\Database\Query\Grammars\SqlServerGrammar; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -56,8 +57,9 @@ public function testCall( $operator = Container::getInstance()->make(Contains::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/EndsWithTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/EndsWithTest.php index 4af5162f7..914bcf686 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/EndsWithTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/EndsWithTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(EndsWith::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/Equal.php b/packages/graphql/src/SearchBy/Operators/Comparison/Equal.php index 1412f82b5..dfd04292f 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/Equal.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/Equal.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -27,7 +28,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { $property = $property->getParent(); $value = $argument->toPlain(); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php index f6342e652..de6ca2c4c 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php @@ -6,6 +6,7 @@ use Illuminate\Container\Container; use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -46,9 +47,10 @@ public function testCall( $operator = Container::getInstance()->make(Equal::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } @@ -75,9 +77,10 @@ public function testCallScout( $operator = Container::getInstance()->make(Equal::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertScoutQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThan.php b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThan.php index 92908df0d..82e4737e8 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThan.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThan.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -23,7 +24,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqual.php b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqual.php index 2ba6fdef7..3d588b38e 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqual.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqual.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -23,7 +24,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqualTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqualTest.php index 91fbd16d8..21ef7232f 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqualTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqualTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(GreaterThanOrEqual::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanTest.php index f5d5f5d09..d76c229cc 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(GreaterThan::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/In.php b/packages/graphql/src/SearchBy/Operators/Comparison/In.php index 89f50e766..2233bccb8 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/In.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/In.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -34,7 +35,13 @@ public function getFieldType(TypeProvider $provider, TypeSource $source): string } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { $property = $property->getParent(); $value = (array) $argument->toPlain(); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php index b3078009a..dd43a85b9 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php @@ -6,6 +6,7 @@ use Illuminate\Container\Container; use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -46,9 +47,10 @@ public function testCall( $operator = Container::getInstance()->make(In::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } @@ -75,9 +77,10 @@ public function testCallScout( $operator = Container::getInstance()->make(In::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertScoutQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php b/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php index 954ea98ca..e0b00c802 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -34,7 +35,13 @@ public function getFieldType(TypeProvider $provider, TypeSource $source): string } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNullTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNullTest.php index 596fe8715..6563ae88b 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNullTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNullTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(IsNotNull::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php b/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php index 6a8e8568d..eb704b3d8 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -34,7 +35,13 @@ public function getFieldType(TypeProvider $provider, TypeSource $source): string } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/IsNullTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/IsNullTest.php index 0c42e044f..ecf80e4eb 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/IsNullTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/IsNullTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(IsNull::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/LessThan.php b/packages/graphql/src/SearchBy/Operators/Comparison/LessThan.php index 37cb98209..0b6473559 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/LessThan.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/LessThan.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -23,7 +24,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqual.php b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqual.php index b19aecb16..edf2ac39c 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqual.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqual.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -23,7 +24,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqualTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqualTest.php index 3759c89cf..6ed09951a 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqualTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqualTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(LessThanOrEqual::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanTest.php index 266b5e506..83a9458df 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(LessThan::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/Like.php b/packages/graphql/src/SearchBy/Operators/Comparison/Like.php index 5e0dd14ab..10a46c6ec 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/Like.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/Like.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; use LastDragon_ru\LaraASP\Core\Utils\Cast; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -24,7 +25,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/LikeTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/LikeTest.php index 696a855b1..f0b20e405 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/LikeTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/LikeTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(Like::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotBetween.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotBetween.php index 2c9d57e34..e52931afe 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotBetween.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotBetween.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; use LastDragon_ru\LaraASP\Core\Utils\Cast; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -23,7 +24,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotBetweenTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotBetweenTest.php index 398aa2336..aab16e3f1 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotBetweenTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotBetweenTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(NotBetween::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotContainsTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotContainsTest.php index 7e2a1f273..6307e49fc 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotContainsTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotContainsTest.php @@ -10,6 +10,7 @@ use Illuminate\Database\Query\Grammars\PostgresGrammar; use Illuminate\Database\Query\Grammars\SQLiteGrammar; use Illuminate\Database\Query\Grammars\SqlServerGrammar; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -56,8 +57,9 @@ public function testCall( $operator = Container::getInstance()->make(NotContains::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotEndsWithTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotEndsWithTest.php index 1b4551ac8..778e47828 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotEndsWithTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotEndsWithTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(NotEndsWith::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotEqual.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotEqual.php index 8e2caa55d..8701f66cd 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotEqual.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotEqual.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -23,7 +24,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotEqualTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotEqualTest.php index 2ef73b2c6..b62ab18ce 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotEqualTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotEqualTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(NotEqual::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php index ad106f98f..3e96810d0 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -38,7 +39,13 @@ protected function getScoutVersion(): ?string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { $property = $property->getParent(); $value = (array) $argument->toPlain(); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php index 176cb63a6..900fa404e 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php @@ -7,6 +7,7 @@ use Illuminate\Container\Container; use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -48,9 +49,10 @@ public function testCall( $operator = Container::getInstance()->make(NotIn::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } @@ -89,9 +91,10 @@ public function testCallScout( // Test $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertScoutQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotLike.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotLike.php index ffc660b86..b1ee6ce36 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotLike.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotLike.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; use LastDragon_ru\LaraASP\Core\Utils\Cast; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\OperatorUnsupportedBuilder; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; @@ -24,7 +25,13 @@ public function getFieldDescription(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotLikeTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotLikeTest.php index 360d65e71..d300c8378 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotLikeTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotLikeTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(NotLike::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotStartsWithTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotStartsWithTest.php index c6d2d54ba..cdb70c5ba 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotStartsWithTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotStartsWithTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(NotStartsWith::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/StartsWithTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/StartsWithTest.php index 47d2a8a13..ec57c0f6c 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/StartsWithTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/StartsWithTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(StartsWith::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Complex/Relation.php b/packages/graphql/src/SearchBy/Operators/Complex/Relation.php index 4d05ce881..37f30bf79 100644 --- a/packages/graphql/src/SearchBy/Operators/Complex/Relation.php +++ b/packages/graphql/src/SearchBy/Operators/Complex/Relation.php @@ -6,6 +6,7 @@ use GraphQL\Language\DirectiveLocation; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use LastDragon_ru\LaraASP\Eloquent\ModelHelper; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -65,7 +66,13 @@ public function isBuilderSupported(string $builder): bool { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { // Supported? if (!($builder instanceof EloquentBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); @@ -95,7 +102,7 @@ public function call(Handler $handler, object $builder, Property $property, Argu if ($hasCount instanceof Argument) { $query = $builder->getQuery()->newQuery(); - $query = $this->property->call($handler, $query, new Property(), $hasCount); + $query = $this->property->call($handler, $context, $query, new Property(), $hasCount); $where = reset($query->wheres); $count = $where['value'] ?? $count; $operator = $where['operator'] ?? $operator; @@ -112,13 +119,13 @@ public function call(Handler $handler, object $builder, Property $property, Argu $property, $operator, $count, - static function (EloquentBuilder $builder) use ($relation, $handler, $alias, $has): void { + static function (EloquentBuilder $builder) use ($context, $relation, $handler, $alias, $has): void { if (!$alias || $alias === $relation->getRelationCountHash(false)) { $alias = $builder->getModel()->getTable(); } if ($has instanceof Argument && $has->value instanceof ArgumentSet) { - $handler->handle($builder, new Property($alias), $has->value); + $handler->handle($context, $builder, new Property($alias), $has->value); } }, ); diff --git a/packages/graphql/src/SearchBy/Operators/Complex/RelationTest.php b/packages/graphql/src/SearchBy/Operators/Complex/RelationTest.php index 6e17d1e35..b8eee73ea 100644 --- a/packages/graphql/src/SearchBy/Operators/Complex/RelationTest.php +++ b/packages/graphql/src/SearchBy/Operators/Complex/RelationTest.php @@ -7,6 +7,7 @@ use Illuminate\Container\Container; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use LastDragon_ru\LaraASP\Eloquent\Exceptions\PropertyIsNotRelation; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\Client\ConditionTooManyOperators; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\SearchBy\Directives\Directive; @@ -46,9 +47,10 @@ public function testCall( $operator = Container::getInstance()->make(Relation::class); $argument = $argumentFactory($this); + $context = new Context(); $search = Container::getInstance()->make(Directive::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); if (is_array($expected)) { self::assertDatabaseQueryEquals($expected, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php b/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php index c70427da2..848295343 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php @@ -3,6 +3,7 @@ namespace LastDragon_ru\LaraASP\GraphQL\SearchBy\Operators\Logical; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -39,10 +40,16 @@ protected function getBoolean(): string { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { // Scout? if (!($builder instanceof ScoutBuilder)) { - return parent::call($handler, $builder, $property, $argument); + return parent::call($handler, $context, $builder, $property, $argument); } // Build @@ -50,7 +57,7 @@ public function call(Handler $handler, object $builder, Property $property, Argu $conditions = $this->getConditions($argument); foreach ($conditions as $arguments) { - $handler->handle($builder, $property, $arguments); + $handler->handle($context, $builder, $property, $arguments); } // Return diff --git a/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php b/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php index 6977a62f4..1514b7563 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php @@ -6,6 +6,7 @@ use Illuminate\Container\Container; use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\SearchBy\Directives\Directive; @@ -48,9 +49,10 @@ public function testCall( $operator = Container::getInstance()->make(AllOf::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Container::getInstance()->make(Directive::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } @@ -77,9 +79,10 @@ public function testCallScout( $operator = Container::getInstance()->make(AllOf::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Container::getInstance()->make(Directive::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertScoutQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Logical/AnyOfTest.php b/packages/graphql/src/SearchBy/Operators/Logical/AnyOfTest.php index 492be78e4..03402b51a 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/AnyOfTest.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/AnyOfTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\SearchBy\Directives\Directive; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -41,9 +42,10 @@ public function testCall( $operator = Container::getInstance()->make(AnyOf::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Container::getInstance()->make(Directive::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Logical/Logical.php b/packages/graphql/src/SearchBy/Operators/Logical/Logical.php index d269998c9..fc3c3b685 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/Logical.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/Logical.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -27,13 +28,19 @@ public function getFieldType(TypeProvider $provider, TypeSource $source): string } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } $builder->where( - function (EloquentBuilder|QueryBuilder $builder) use ($handler, $property, $argument): void { + function (EloquentBuilder|QueryBuilder $builder) use ($handler, $context, $property, $argument): void { // The last item is the name of the operator not a property $property = $property->getParent(); $conditions = $this->getConditions($argument); @@ -42,10 +49,11 @@ function (EloquentBuilder|QueryBuilder $builder) use ($handler, $property, $argu $builder->where( static function (EloquentBuilder|QueryBuilder $builder) use ( $handler, + $context, $arguments, - $property + $property, ): void { - $handler->handle($builder, $property, $arguments); + $handler->handle($context, $builder, $property, $arguments); }, null, null, diff --git a/packages/graphql/src/SearchBy/Operators/Logical/NotTest.php b/packages/graphql/src/SearchBy/Operators/Logical/NotTest.php index a45320ac6..b5195baa3 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/NotTest.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/NotTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\SearchBy\Directives\Directive; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -41,9 +42,10 @@ public function testCall( $operator = Container::getInstance()->make(Not::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Container::getInstance()->make(Directive::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SortBy/Operators/Extra/Random.php b/packages/graphql/src/SortBy/Operators/Extra/Random.php index a725c4c4d..e7ada4a91 100644 --- a/packages/graphql/src/SortBy/Operators/Extra/Random.php +++ b/packages/graphql/src/SortBy/Operators/Extra/Random.php @@ -5,6 +5,7 @@ use GraphQL\Language\DirectiveLocation; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -56,7 +57,13 @@ public function isBuilderSupported(string $builder): bool { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); } diff --git a/packages/graphql/src/SortBy/Operators/Extra/RandomTest.php b/packages/graphql/src/SortBy/Operators/Extra/RandomTest.php index f16bec652..34361992b 100644 --- a/packages/graphql/src/SortBy/Operators/Extra/RandomTest.php +++ b/packages/graphql/src/SortBy/Operators/Extra/RandomTest.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Container\Container; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Testing\Package\DataProviders\BuilderDataProvider; @@ -39,9 +40,10 @@ public function testCall( $operator = Container::getInstance()->make(Random::class); $property = $property->getChild('operator name should be ignored'); $argument = $argumentFactory($this); + $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $builder, $property, $argument); + $builder = $operator->call($search, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SortBy/Operators/Field.php b/packages/graphql/src/SortBy/Operators/Field.php index 00beae538..364dc6103 100644 --- a/packages/graphql/src/SortBy/Operators/Field.php +++ b/packages/graphql/src/SortBy/Operators/Field.php @@ -2,6 +2,7 @@ namespace LastDragon_ru\LaraASP\GraphQL\SortBy\Operators; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -50,7 +51,13 @@ public function isBuilderSupported(string $builder): bool { } #[Override] - public function call(Handler $handler, object $builder, Property $property, Argument $argument): object { + public function call( + Handler $handler, + Context $context, + object $builder, + Property $property, + Argument $argument, + ): object { $sorter = $this->factory->create($builder); if ($sorter) { diff --git a/packages/graphql/src/SortBy/Operators/FieldTest.php b/packages/graphql/src/SortBy/Operators/FieldTest.php index 35799b18d..b88a8d7ec 100644 --- a/packages/graphql/src/SortBy/Operators/FieldTest.php +++ b/packages/graphql/src/SortBy/Operators/FieldTest.php @@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Property; use LastDragon_ru\LaraASP\GraphQL\Package; use LastDragon_ru\LaraASP\GraphQL\SortBy\Contracts\Sorter; @@ -54,8 +55,9 @@ public function testCall( $operator = Container::getInstance()->make(Field::class); $argument = $argumentFactory($this); $directive = Container::getInstance()->make(Directive::class); + $context = new Context(); $builder = $builderFactory($this); - $builder = $operator->call($directive, $builder, $property, $argument); + $builder = $operator->call($directive, $context, $builder, $property, $argument); self::assertDatabaseQueryEquals($expected, $builder); } @@ -82,9 +84,10 @@ public function testCallEloquentBuilder(): void { Direction::Asc, 'enum Test { Asc }', ); + $context = new Context(); $builder = Mockery::mock(EloquentBuilder::class); - $operator->call($directive, $builder, $property, $argument); + $operator->call($directive, $context, $builder, $property, $argument); } public function testCallQueryBuilder(): void { @@ -107,9 +110,10 @@ public function testCallQueryBuilder(): void { 'Test', Direction::Asc, ); + $context = new Context(); $builder = Mockery::mock(QueryBuilder::class); - $operator->call($directive, $builder, $property, $argument); + $operator->call($directive, $context, $builder, $property, $argument); } public function testCallScoutBuilder(): void { @@ -133,9 +137,10 @@ public function testCallScoutBuilder(): void { Direction::Asc, 'enum Test { Asc }', ); + $context = new Context(); $builder = Mockery::mock(ScoutBuilder::class); - $operator->call($directive, $builder, $property, $argument); + $operator->call($directive, $context, $builder, $property, $argument); } /** From 0944240c17a72f4ae7062d1117e98a0656cb1a84 Mon Sep 17 00:00:00 2001 From: Aleksei Lebedev <1329824+LastDragon-ru@users.noreply.github.com> Date: Wed, 10 Jan 2024 10:34:38 +0400 Subject: [PATCH 2/8] Context support for `TypeDefinition`, `TypeProvider`, `Operator::getFieldType()`. --- .../src/Builder/Contracts/Operator.php | 2 +- .../src/Builder/Contracts/TypeDefinition.php | 3 +- .../src/Builder/Contracts/TypeProvider.php | 2 +- .../Builder/Directives/HandlerDirective.php | 9 ++-- .../Builder/Directives/PropertyDirective.php | 2 +- .../TypeDefinitionImpossibleToCreateType.php | 12 +++-- .../TypeDefinitionInvalidTypeName.php | 6 +++ packages/graphql/src/Builder/Manipulator.php | 20 +++++---- .../graphql/src/Builder/ManipulatorTest.php | 6 +-- .../graphql/src/Builder/OperatorsTest.php | 2 +- .../graphql/src/Builder/Types/InputObject.php | 45 ++++++++++++++----- .../graphql/src/Scalars/JsonStringType.php | 4 +- .../src/SearchBy/Directives/Directive.php | 2 + .../src/SearchBy/Directives/DirectiveTest.php | 10 ++++- .../src/SearchBy/Operators/BaseOperator.php | 3 +- .../SearchBy/Operators/Comparison/Between.php | 4 +- .../src/SearchBy/Operators/Comparison/In.php | 2 +- .../Operators/Comparison/IsNotNull.php | 4 +- .../SearchBy/Operators/Comparison/IsNull.php | 4 +- .../SearchBy/Operators/Comparison/NotIn.php | 2 +- .../SearchBy/Operators/Complex/Relation.php | 4 +- .../Operators/Complex/RelationType.php | 9 ++-- .../src/SearchBy/Operators/Condition.php | 5 ++- .../src/SearchBy/Operators/Logical/AllOf.php | 4 +- .../src/SearchBy/Operators/Logical/AnyOf.php | 5 ++- .../SearchBy/Operators/Logical/Logical.php | 4 +- .../graphql/src/SearchBy/Types/Condition.php | 18 +++++--- .../src/SearchBy/Types/Enumeration.php | 6 ++- packages/graphql/src/SearchBy/Types/Flag.php | 4 +- packages/graphql/src/SearchBy/Types/Range.php | 4 +- .../graphql/src/SearchBy/Types/Scalar.php | 6 ++- .../src/SortBy/Directives/Directive.php | 3 ++ .../src/SortBy/Directives/DirectiveTest.php | 5 ++- .../graphql/src/SortBy/Operators/Clause.php | 5 ++- .../src/SortBy/Operators/Extra/Random.php | 4 +- .../graphql/src/SortBy/Operators/Field.php | 4 +- .../graphql/src/SortBy/Operators/Property.php | 5 ++- packages/graphql/src/SortBy/Types/Clause.php | 18 +++++--- .../graphql/src/SortBy/Types/Direction.php | 4 +- packages/graphql/src/SortBy/Types/Flag.php | 4 +- .../src/Stream/Directives/Directive.php | 4 +- .../graphql/src/Stream/Directives/Offset.php | 4 +- .../graphql/src/Stream/Types/Navigation.php | 6 ++- packages/graphql/src/Stream/Types/Offset.php | 4 +- packages/graphql/src/Stream/Types/Stream.php | 6 ++- 45 files changed, 193 insertions(+), 96 deletions(-) diff --git a/packages/graphql/src/Builder/Contracts/Operator.php b/packages/graphql/src/Builder/Contracts/Operator.php index 5159810e9..31a49fa20 100644 --- a/packages/graphql/src/Builder/Contracts/Operator.php +++ b/packages/graphql/src/Builder/Contracts/Operator.php @@ -13,7 +13,7 @@ interface Operator extends Directive { */ public static function getName(): string; - public function getFieldType(TypeProvider $provider, TypeSource $source): string; + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string; public function getFieldDescription(): string; diff --git a/packages/graphql/src/Builder/Contracts/TypeDefinition.php b/packages/graphql/src/Builder/Contracts/TypeDefinition.php index 2e9ed8003..ed99ca305 100644 --- a/packages/graphql/src/Builder/Contracts/TypeDefinition.php +++ b/packages/graphql/src/Builder/Contracts/TypeDefinition.php @@ -12,7 +12,7 @@ interface TypeDefinition { /** * Returns the type name for given Builder and Source. */ - public function getTypeName(Manipulator $manipulator, TypeSource $source): string; + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string; /** * Returns the type definition for given Source if possible. The name must be equal to `$name`. @@ -22,6 +22,7 @@ public function getTypeName(Manipulator $manipulator, TypeSource $source): strin public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null; } diff --git a/packages/graphql/src/Builder/Contracts/TypeProvider.php b/packages/graphql/src/Builder/Contracts/TypeProvider.php index 7ead2d0c6..a9d79df3c 100644 --- a/packages/graphql/src/Builder/Contracts/TypeProvider.php +++ b/packages/graphql/src/Builder/Contracts/TypeProvider.php @@ -13,7 +13,7 @@ interface TypeProvider { /** * @param class-string $definition */ - public function getType(string $definition, TypeSource $source): string; + public function getType(string $definition, TypeSource $source, Context $context): string; /** * @param (TypeDefinitionNode&Node)|NamedTypeNode|ListTypeNode|NonNullTypeNode|Type $type diff --git a/packages/graphql/src/Builder/Directives/HandlerDirective.php b/packages/graphql/src/Builder/Directives/HandlerDirective.php index 4c1d954cf..0d8ae7884 100644 --- a/packages/graphql/src/Builder/Directives/HandlerDirective.php +++ b/packages/graphql/src/Builder/Directives/HandlerDirective.php @@ -218,8 +218,9 @@ public function manipulateArgDefinition( } // Argument - $source = $this->getFieldArgumentSource($manipulator, $parentType, $parentField, $argDefinition); - $type = $this->getArgDefinitionType($manipulator, $documentAST, $source); + $context = new Context(); + $source = $this->getFieldArgumentSource($manipulator, $parentType, $parentField, $argDefinition); + $type = $this->getArgDefinitionType($manipulator, $documentAST, $source, $context); $manipulator->setArgumentType( $parentType, @@ -238,6 +239,7 @@ abstract protected function getArgDefinitionType( Manipulator $manipulator, DocumentAST $document, ObjectFieldArgumentSource|InterfaceFieldArgumentSource $argument, + ContextContract $context, ): ListTypeNode|NamedTypeNode|NonNullTypeNode; /** @@ -248,6 +250,7 @@ protected function getArgumentTypeDefinitionNode( DocumentAST $document, ObjectFieldArgumentSource|InterfaceFieldArgumentSource $argument, string $operator, + ContextContract $context, ): ListTypeNode|NamedTypeNode|NonNullTypeNode|null { $type = null; $definition = $manipulator->isPlaceholder($argument->getArgument()) @@ -257,7 +260,7 @@ protected function getArgumentTypeDefinitionNode( if ($definition) { $operator = $manipulator->getOperator(static::getScope(), $operator); $node = $manipulator->getTypeSource($definition); - $type = $operator->getFieldType($manipulator, $node); + $type = $operator->getFieldType($manipulator, $node, $context); $type = Parser::typeReference($type); } diff --git a/packages/graphql/src/Builder/Directives/PropertyDirective.php b/packages/graphql/src/Builder/Directives/PropertyDirective.php index 4bd0e2ee4..c71140309 100644 --- a/packages/graphql/src/Builder/Directives/PropertyDirective.php +++ b/packages/graphql/src/Builder/Directives/PropertyDirective.php @@ -24,7 +24,7 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { return $source->getTypeName(); } diff --git a/packages/graphql/src/Builder/Exceptions/TypeDefinitionImpossibleToCreateType.php b/packages/graphql/src/Builder/Exceptions/TypeDefinitionImpossibleToCreateType.php index ccea766f0..5a2687abb 100644 --- a/packages/graphql/src/Builder/Exceptions/TypeDefinitionImpossibleToCreateType.php +++ b/packages/graphql/src/Builder/Exceptions/TypeDefinitionImpossibleToCreateType.php @@ -2,6 +2,7 @@ namespace LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use Stringable; use Throwable; @@ -14,14 +15,15 @@ class TypeDefinitionImpossibleToCreateType extends BuilderException { */ public function __construct( protected string $definition, - protected Stringable|string|null $source, + protected Stringable|string $source, + protected Context $context, Throwable $previous = null, ) { parent::__construct( sprintf( 'Definition `%s`: Impossible to create type for `%s`.', $this->definition, - $this->source ?: 'null', + $this->source, ), $previous, ); @@ -31,7 +33,11 @@ public function getDefinition(): string { return $this->definition; } - public function getSource(): Stringable|string|null { + public function getSource(): Stringable|string { return $this->source; } + + public function getContext(): Context { + return $this->context; + } } diff --git a/packages/graphql/src/Builder/Exceptions/TypeDefinitionInvalidTypeName.php b/packages/graphql/src/Builder/Exceptions/TypeDefinitionInvalidTypeName.php index 29f7b8be2..93200bb1f 100644 --- a/packages/graphql/src/Builder/Exceptions/TypeDefinitionInvalidTypeName.php +++ b/packages/graphql/src/Builder/Exceptions/TypeDefinitionInvalidTypeName.php @@ -2,6 +2,7 @@ namespace LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use Throwable; @@ -15,6 +16,7 @@ public function __construct( protected string $type, protected string $expected, protected string $actual, + protected Context $context, Throwable $previous = null, ) { parent::__construct( @@ -42,4 +44,8 @@ public function getExpected(): string { public function getActual(): string { return $this->actual; } + + public function getContext(): Context { + return $this->context; + } } diff --git a/packages/graphql/src/Builder/Manipulator.php b/packages/graphql/src/Builder/Manipulator.php index 3c0d15c1e..e35dc879c 100644 --- a/packages/graphql/src/Builder/Manipulator.php +++ b/packages/graphql/src/Builder/Manipulator.php @@ -22,6 +22,7 @@ use GraphQL\Type\Definition\Type; use Illuminate\Container\Container; use Illuminate\Support\Str; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scope; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; @@ -78,10 +79,10 @@ public function getBuilderInfo(): BuilderInfo { // // ========================================================================= #[Override] - public function getType(string $definition, TypeSource $source): string { + public function getType(string $definition, TypeSource $source, Context $context): string { // Exists? $instance = Container::getInstance()->make($definition); - $name = $instance->getTypeName($this, $source); + $name = $instance->getTypeName($this, $source, $context); if ($this->isTypeDefinitionExists($name)) { return $name; @@ -91,14 +92,14 @@ public function getType(string $definition, TypeSource $source): string { $this->addFakeTypeDefinition($name); // Create new - $node = $instance->getTypeDefinition($this, $source, $name); + $node = $instance->getTypeDefinition($this, $source, $context, $name); if (!$node) { - throw new TypeDefinitionImpossibleToCreateType($definition, $source); + throw new TypeDefinitionImpossibleToCreateType($definition, $source, $context); } if ($name !== $this->getName($node)) { - throw new TypeDefinitionInvalidTypeName($definition, $name, $this->getName($node)); + throw new TypeDefinitionInvalidTypeName($definition, $name, $this->getName($node), $context); } // Save @@ -227,6 +228,7 @@ public function getTypeOperators(string $scope, string $type, string ...$extras) public function getOperatorField( Operator $operator, TypeSource $source, + Context $context, ?string $field, ?string $description = null, array $directives = [], @@ -247,7 +249,7 @@ public function getOperatorField( } // Definition - $type = $operator->getFieldType($this, $source); + $type = $operator->getFieldType($this, $source, $context); $field = $field ?: $operator::getName(); $directives = implode( "\n", @@ -269,12 +271,12 @@ public function getOperatorField( /** * @param list $operators */ - public function getOperatorsFields(array $operators, TypeSource $source): string { + public function getOperatorsFields(array $operators, TypeSource $source, Context $context): string { return implode( "\n", array_map( - function (Operator $operator) use ($source): string { - return $this->getOperatorField($operator, $source, null); + function (Operator $operator) use ($source, $context): string { + return $this->getOperatorField($operator, $source, $context, null); }, $operators, ), diff --git a/packages/graphql/src/Builder/ManipulatorTest.php b/packages/graphql/src/Builder/ManipulatorTest.php index 81771454f..acfe985d5 100644 --- a/packages/graphql/src/Builder/ManipulatorTest.php +++ b/packages/graphql/src/Builder/ManipulatorTest.php @@ -381,7 +381,7 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { return $source->getTypeName(); } @@ -418,7 +418,7 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { return $source->getTypeName(); } @@ -455,7 +455,7 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { return $source->getTypeName(); } diff --git a/packages/graphql/src/Builder/OperatorsTest.php b/packages/graphql/src/Builder/OperatorsTest.php index 0f331e5d6..a35f4697f 100644 --- a/packages/graphql/src/Builder/OperatorsTest.php +++ b/packages/graphql/src/Builder/OperatorsTest.php @@ -169,7 +169,7 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { throw new Exception('Should not be called'); } diff --git a/packages/graphql/src/Builder/Types/InputObject.php b/packages/graphql/src/Builder/Types/InputObject.php index fc02f8015..16b91a4aa 100644 --- a/packages/graphql/src/Builder/Types/InputObject.php +++ b/packages/graphql/src/Builder/Types/InputObject.php @@ -9,6 +9,7 @@ use GraphQL\Language\BlockString; use GraphQL\Language\Parser; use GraphQL\Type\Definition\Type; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scope; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; @@ -42,6 +43,7 @@ abstract protected function getScope(): string; abstract protected function getDescription( Manipulator $manipulator, InputSource|ObjectSource|InterfaceSource $source, + Context $context, ): string; /** @@ -51,6 +53,7 @@ abstract protected function getDescription( public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null { // Source? @@ -61,9 +64,9 @@ public function getTypeDefinition( } // Type - $description = $this->getDescription($manipulator, $source); + $description = $this->getDescription($manipulator, $source, $context); $description = BlockString::print($description); - $operators = $this->getOperators($manipulator, $source); + $operators = $this->getOperators($manipulator, $source, $context); $definition = Parser::inputObjectTypeDefinition( <<getOperatorsFields($operators, $source)} + {$manipulator->getOperatorsFields($operators, $source, $context)} } GRAPHQL, ); @@ -95,12 +98,12 @@ public function getTypeDefinition( // Field & Type $fieldSource = $source->getField($field); - if (!$this->isFieldConvertable($manipulator, $fieldSource)) { + if (!$this->isFieldConvertable($manipulator, $fieldSource, $context)) { continue; } // Add - $fieldDefinition = $this->getFieldDefinition($manipulator, $fieldSource); + $fieldDefinition = $this->getFieldDefinition($manipulator, $fieldSource, $context); if ($fieldDefinition) { $definition->fields[] = $fieldDefinition; @@ -125,6 +128,7 @@ public function getTypeDefinition( protected function getOperators( Manipulator $manipulator, InputSource|ObjectSource|InterfaceSource $source, + Context $context, ): array { return []; } @@ -132,6 +136,7 @@ protected function getOperators( protected function isFieldConvertable( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): bool { // Args? (in general case we don't know how they should be converted) if ($field->hasArguments()) { @@ -146,7 +151,7 @@ protected function isFieldConvertable( // Resolver? $resolver = $manipulator->getDirective($field->getField(), FieldResolver::class); - if ($resolver !== null && !$this->isFieldDirectiveAllowed($manipulator, $resolver)) { + if ($resolver !== null && !$this->isFieldDirectiveAllowed($manipulator, $resolver, $context)) { return false; } @@ -157,8 +162,9 @@ protected function isFieldConvertable( protected function getFieldDefinition( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): InputValueDefinitionNode|null { - [$operator, $type] = $this->getFieldOperator($manipulator, $field) ?? [null, null]; + [$operator, $type] = $this->getFieldOperator($manipulator, $field, $context) ?? [null, null]; if ($operator === null || !$operator->isBuilderSupported($manipulator->getBuilderInfo()->getBuilder())) { return null; @@ -169,9 +175,16 @@ protected function getFieldDefinition( } $fieldName = $manipulator->getName($field->getField()); - $fieldDesc = $this->getFieldDescription($manipulator, $field); - $fieldDirectives = $this->getFieldDirectives($manipulator, $field); - $fieldDefinition = $manipulator->getOperatorField($operator, $type, $fieldName, $fieldDesc, $fieldDirectives); + $fieldDesc = $this->getFieldDescription($manipulator, $field, $context); + $fieldDirectives = $this->getFieldDirectives($manipulator, $field, $context); + $fieldDefinition = $manipulator->getOperatorField( + $operator, + $type, + $context, + $fieldName, + $fieldDesc, + $fieldDirectives, + ); return Parser::inputValueDefinition($fieldDefinition); } @@ -182,6 +195,7 @@ protected function getFieldDefinition( abstract protected function getFieldOperator( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): ?array; /** @@ -195,6 +209,7 @@ protected function getFieldDirectiveOperator( string $directive, Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): ?Operator { // Directive? $operator = null; @@ -222,6 +237,7 @@ static function (Operator $operator) use ($builder): bool { protected function getFieldDescription( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): string|null { $description = null; @@ -246,11 +262,12 @@ protected function getFieldDescription( protected function getFieldDirectives( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): array { $directives = []; foreach ($manipulator->getDirectives($field->getField()) as $directive) { - if ($this->isFieldDirectiveAllowed($manipulator, $directive)) { + if ($this->isFieldDirectiveAllowed($manipulator, $directive, $context)) { $node = $manipulator->getDirectiveNode($directive); if ($node) { @@ -262,7 +279,11 @@ protected function getFieldDirectives( return $directives; } - protected function isFieldDirectiveAllowed(Manipulator $manipulator, Directive $directive): bool { + protected function isFieldDirectiveAllowed( + Manipulator $manipulator, + Directive $directive, + Context $context, + ): bool { return $directive instanceof Operator || $directive instanceof RenameDirective; } diff --git a/packages/graphql/src/Scalars/JsonStringType.php b/packages/graphql/src/Scalars/JsonStringType.php index 3286a2e4a..1407cab4e 100644 --- a/packages/graphql/src/Scalars/JsonStringType.php +++ b/packages/graphql/src/Scalars/JsonStringType.php @@ -12,6 +12,7 @@ use GraphQL\Type\Definition\StringType; use GraphQL\Type\Definition\Type; use GraphQL\Utils\Utils; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator; @@ -85,7 +86,7 @@ protected function validate(mixed $value, string $error): string { // // ========================================================================= #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source): string { + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { return $this->name(); } @@ -93,6 +94,7 @@ public function getTypeName(Manipulator $manipulator, TypeSource $source): strin public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null { return $this; diff --git a/packages/graphql/src/SearchBy/Directives/Directive.php b/packages/graphql/src/SearchBy/Directives/Directive.php index 5686f4748..b29069dcf 100644 --- a/packages/graphql/src/SearchBy/Directives/Directive.php +++ b/packages/graphql/src/SearchBy/Directives/Directive.php @@ -60,12 +60,14 @@ protected function getArgDefinitionType( Manipulator $manipulator, DocumentAST $document, ObjectFieldArgumentSource|InterfaceFieldArgumentSource $argument, + Context $context, ): ListTypeNode|NamedTypeNode|NonNullTypeNode { $type = $this->getArgumentTypeDefinitionNode( $manipulator, $document, $argument, SearchByOperatorConditionDirective::class, + $context, ); if (!$type) { diff --git a/packages/graphql/src/SearchBy/Directives/DirectiveTest.php b/packages/graphql/src/SearchBy/Directives/DirectiveTest.php index 14cce9360..646b55ce3 100644 --- a/packages/graphql/src/SearchBy/Directives/DirectiveTest.php +++ b/packages/graphql/src/SearchBy/Directives/DirectiveTest.php @@ -411,8 +411,12 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return $provider->getType(static::class, $provider->getTypeSource(Type::int())); + public function getFieldType( + TypeProvider $provider, + TypeSource $source, + Context $context, + ): string { + return $provider->getType(static::class, $provider->getTypeSource(Type::int()), $context); } #[Override] @@ -442,6 +446,7 @@ public function call( public function getTypeName( Manipulator $manipulator, TypeSource $source, + Context $context, ): string { $directiveName = Directive::Name; $typeName = Str::studly($source->getTypeName()); @@ -453,6 +458,7 @@ public function getTypeName( public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode&Node { return Parser::inputObjectTypeDefinition( diff --git a/packages/graphql/src/SearchBy/Operators/BaseOperator.php b/packages/graphql/src/SearchBy/Operators/BaseOperator.php index 0504cdb6a..d1d7e3b35 100644 --- a/packages/graphql/src/SearchBy/Operators/BaseOperator.php +++ b/packages/graphql/src/SearchBy/Operators/BaseOperator.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\Builder as QueryBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -15,7 +16,7 @@ abstract class BaseOperator extends OperatorDirective implements Operator, Marker { #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { return $source->getTypeName(); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/Between.php b/packages/graphql/src/SearchBy/Operators/Comparison/Between.php index 7dd987580..3b9bee7f3 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/Between.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/Between.php @@ -28,8 +28,8 @@ public function getFieldDescription(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return $provider->getType(Range::class, $source); + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return $provider->getType(Range::class, $source, $context); } #[Override] diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/In.php b/packages/graphql/src/SearchBy/Operators/Comparison/In.php index 2233bccb8..7db259283 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/In.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/In.php @@ -30,7 +30,7 @@ public function getFieldDescription(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { return "[{$source->getTypeName()}!]"; } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php b/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php index e0b00c802..d8c153e37 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php @@ -30,8 +30,8 @@ public function getFieldDescription(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return $provider->getType(Flag::class, $source); + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return $provider->getType(Flag::class, $source, $context); } #[Override] diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php b/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php index eb704b3d8..f1f8dc6f5 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php @@ -30,8 +30,8 @@ public function getFieldDescription(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return $provider->getType(Flag::class, $source); + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return $provider->getType(Flag::class, $source, $context); } #[Override] diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php index 3e96810d0..348b9d684 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php @@ -30,7 +30,7 @@ public function getFieldDescription(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { return "[{$source->getTypeName()}!]"; } diff --git a/packages/graphql/src/SearchBy/Operators/Complex/Relation.php b/packages/graphql/src/SearchBy/Operators/Complex/Relation.php index 37f30bf79..6efb3f708 100644 --- a/packages/graphql/src/SearchBy/Operators/Complex/Relation.php +++ b/packages/graphql/src/SearchBy/Operators/Complex/Relation.php @@ -51,8 +51,8 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return $provider->getType(RelationType::class, $source); + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return $provider->getType(RelationType::class, $source, $context); } #[Override] diff --git a/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php b/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php index 1f5be077c..96d67baef 100644 --- a/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php +++ b/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php @@ -6,6 +6,7 @@ use GraphQL\Language\Parser; use GraphQL\Type\Definition\Type; use Illuminate\Support\Str; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator; @@ -20,7 +21,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source): string { + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { $typeName = $source->getTypeName(); $builderName = $manipulator->getBuilderInfo()->getName(); $operatorName = Str::studly(Relation::getName()); @@ -33,10 +34,12 @@ public function getTypeName(Manipulator $manipulator, TypeSource $source): strin public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null { - $count = $manipulator->getType(Scalar::class, $manipulator->getTypeSource(Type::nonNull(Type::int()))); - $where = $manipulator->getType(Condition::class, $source); + $int = $manipulator->getTypeSource(Type::nonNull(Type::int())); + $count = $manipulator->getType(Scalar::class, $int, $context); + $where = $manipulator->getType(Condition::class, $source, $context); return Parser::inputObjectTypeDefinition( <<getType(ConditionType::class, $source); + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return $provider->getType(ConditionType::class, $source, $context); } } diff --git a/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php b/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php index 848295343..c2fc0753e 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php @@ -30,8 +30,8 @@ public function getFieldDescription(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return "[{$provider->getType(Condition::class, $source)}!]"; + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return "[{$provider->getType(Condition::class, $source, $context)}!]"; } #[Override] diff --git a/packages/graphql/src/SearchBy/Operators/Logical/AnyOf.php b/packages/graphql/src/SearchBy/Operators/Logical/AnyOf.php index fb4604bb8..6057f8c8b 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/AnyOf.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/AnyOf.php @@ -2,6 +2,7 @@ namespace LastDragon_ru\LaraASP\GraphQL\SearchBy\Operators\Logical; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\SearchBy\Types\Condition; @@ -22,8 +23,8 @@ public function getFieldDescription(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return "[{$provider->getType(Condition::class, $source)}!]"; + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return "[{$provider->getType(Condition::class, $source, $context)}!]"; } #[Override] diff --git a/packages/graphql/src/SearchBy/Operators/Logical/Logical.php b/packages/graphql/src/SearchBy/Operators/Logical/Logical.php index fc3c3b685..17b4ebe6c 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/Logical.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/Logical.php @@ -23,8 +23,8 @@ abstract class Logical extends BaseOperator { #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return $provider->getType(Condition::class, $source); + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return $provider->getType(Condition::class, $source, $context); } #[Override] diff --git a/packages/graphql/src/SearchBy/Types/Condition.php b/packages/graphql/src/SearchBy/Types/Condition.php index d9aef2f92..283071c29 100644 --- a/packages/graphql/src/SearchBy/Types/Condition.php +++ b/packages/graphql/src/SearchBy/Types/Condition.php @@ -13,6 +13,7 @@ use GraphQL\Type\Definition\InterfaceType; use GraphQL\Type\Definition\ObjectType; use GraphQL\Type\Definition\ScalarType; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator as OperatorContract; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator; @@ -40,7 +41,7 @@ class Condition extends InputObject { #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source): string { + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { $typeName = $source->getTypeName(); $builderName = $manipulator->getBuilderInfo()->getName(); $directiveName = Directive::Name; @@ -57,6 +58,7 @@ protected function getScope(): string { protected function getDescription( Manipulator $manipulator, InputSource|ObjectSource|InterfaceSource $source, + Context $context, ): string { return "Available conditions for `{$source}` (only one property allowed at a time)."; } @@ -68,10 +70,11 @@ protected function getDescription( protected function getOperators( Manipulator $manipulator, InputSource|ObjectSource|InterfaceSource $source, + Context $context, ): array { return array_values(array_unique( array_merge( - parent::getOperators($manipulator, $source), + parent::getOperators($manipulator, $source, $context), $manipulator->getTypeOperators($this->getScope(), Operators::Extra), ), SORT_REGULAR, @@ -82,9 +85,10 @@ protected function getOperators( protected function isFieldConvertable( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): bool { // Parent? - if (!parent::isFieldConvertable($manipulator, $field)) { + if (!parent::isFieldConvertable($manipulator, $field, $context)) { return false; } @@ -111,6 +115,7 @@ protected function isFieldConvertable( protected function getFieldOperator( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): ?array { $fieldType = $field->getTypeDefinition(); $operator = match (true) { @@ -126,7 +131,7 @@ protected function getFieldOperator( $fieldType instanceof ObjectType, $fieldType instanceof InterfaceTypeDefinitionNode, $fieldType instanceof InterfaceType - => $this->getObjectDefaultOperator($manipulator, $field), + => $this->getObjectDefaultOperator($manipulator, $field, $context), default => null, }; @@ -139,7 +144,7 @@ protected function getFieldOperator( $source = null; if (is_string($operator)) { - $type = $manipulator->getType($operator, $field); + $type = $manipulator->getType($operator, $field, $context); $source = $manipulator->getTypeSource(Parser::typeReference($type)); $operator = $manipulator->getOperator($this->getScope(), SearchByOperatorPropertyDirective::class); } @@ -150,9 +155,10 @@ protected function getFieldOperator( protected function getObjectDefaultOperator( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): ?OperatorContract { // Directive? - $directive = parent::getFieldDirectiveOperator(Operator::class, $manipulator, $field); + $directive = parent::getFieldDirectiveOperator(Operator::class, $manipulator, $field, $context); if ($directive) { return $directive; diff --git a/packages/graphql/src/SearchBy/Types/Enumeration.php b/packages/graphql/src/SearchBy/Types/Enumeration.php index 631e029b7..d4fe4ab6e 100644 --- a/packages/graphql/src/SearchBy/Types/Enumeration.php +++ b/packages/graphql/src/SearchBy/Types/Enumeration.php @@ -5,6 +5,7 @@ use GraphQL\Language\AST\TypeDefinitionNode; use GraphQL\Language\Parser; use GraphQL\Type\Definition\Type; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator; @@ -18,7 +19,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source): string { + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { $directiveName = Directive::Name; $builderName = $manipulator->getBuilderInfo()->getName(); $typeName = $source->getTypeName(); @@ -34,6 +35,7 @@ public function getTypeName(Manipulator $manipulator, TypeSource $source): strin public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null { // Operators @@ -47,7 +49,7 @@ public function getTypeDefinition( } // Definition - $content = $manipulator->getOperatorsFields($operators, $source); + $content = $manipulator->getOperatorsFields($operators, $source, $context); $typeName = $manipulator->getTypeFullName($source->getType()); $definition = Parser::inputObjectTypeDefinition( <<getTypeName(); $directiveName = Directive::Name; @@ -28,6 +29,7 @@ public function getTypeName(Manipulator $manipulator, TypeSource $source): strin public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null { return Parser::inputObjectTypeDefinition( diff --git a/packages/graphql/src/SearchBy/Types/Scalar.php b/packages/graphql/src/SearchBy/Types/Scalar.php index 19590af8b..fb543085b 100644 --- a/packages/graphql/src/SearchBy/Types/Scalar.php +++ b/packages/graphql/src/SearchBy/Types/Scalar.php @@ -5,6 +5,7 @@ use GraphQL\Language\AST\TypeDefinitionNode; use GraphQL\Language\Parser; use GraphQL\Type\Definition\Type; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator; @@ -18,7 +19,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source): string { + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { $directiveName = Directive::Name; $builderName = $manipulator->getBuilderInfo()->getName(); $typeName = $source->getTypeName(); @@ -34,6 +35,7 @@ public function getTypeName(Manipulator $manipulator, TypeSource $source): strin public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null { // Operators @@ -46,7 +48,7 @@ public function getTypeDefinition( } // Definition - $content = $manipulator->getOperatorsFields($operators, $source); + $content = $manipulator->getOperatorsFields($operators, $source, $context); $typeName = $manipulator->getTypeFullName($source->getType()); $definition = Parser::inputObjectTypeDefinition( <<getArgumentTypeDefinitionNode( $manipulator, $document, $argument, SortByOperatorClauseDirective::class, + $context, ); if (!$type) { diff --git a/packages/graphql/src/SortBy/Directives/DirectiveTest.php b/packages/graphql/src/SortBy/Directives/DirectiveTest.php index f1266b5ad..a8b0fbbec 100644 --- a/packages/graphql/src/SortBy/Directives/DirectiveTest.php +++ b/packages/graphql/src/SortBy/Directives/DirectiveTest.php @@ -12,6 +12,7 @@ use Illuminate\Database\Eloquent\Model as EloquentModel; use Illuminate\Database\Query\Builder as QueryBuilder; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\Client\ConditionTooManyProperties; use LastDragon_ru\LaraASP\GraphQL\Builder\Exceptions\TypeDefinitionImpossibleToCreateType; @@ -179,7 +180,9 @@ public function testManipulateArgDefinitionTypeRegistryEmpty(): void { ], ]); - self::expectExceptionObject(new TypeDefinitionImpossibleToCreateType(Clause::class, 'type TestType')); + self::expectExceptionObject( + new TypeDefinitionImpossibleToCreateType(Clause::class, 'type TestType', new Context()), + ); $registry = Container::getInstance()->make(TypeRegistry::class); $registry->register($type); diff --git a/packages/graphql/src/SortBy/Operators/Clause.php b/packages/graphql/src/SortBy/Operators/Clause.php index b20103e0b..1f804e2d4 100644 --- a/packages/graphql/src/SortBy/Operators/Clause.php +++ b/packages/graphql/src/SortBy/Operators/Clause.php @@ -2,6 +2,7 @@ namespace LastDragon_ru\LaraASP\GraphQL\SortBy\Operators; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\SortBy\Types\Clause as ClauseType; @@ -14,7 +15,7 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return '['.$provider->getType(ClauseType::class, $source).'!]'; + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return '['.$provider->getType(ClauseType::class, $source, $context).'!]'; } } diff --git a/packages/graphql/src/SortBy/Operators/Extra/Random.php b/packages/graphql/src/SortBy/Operators/Extra/Random.php index e7ada4a91..be102051b 100644 --- a/packages/graphql/src/SortBy/Operators/Extra/Random.php +++ b/packages/graphql/src/SortBy/Operators/Extra/Random.php @@ -46,8 +46,8 @@ public function getFieldDescription(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return $provider->getType(Flag::class, $source); + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return $provider->getType(Flag::class, $source, $context); } #[Override] diff --git a/packages/graphql/src/SortBy/Operators/Field.php b/packages/graphql/src/SortBy/Operators/Field.php index 364dc6103..5f2d892b4 100644 --- a/packages/graphql/src/SortBy/Operators/Field.php +++ b/packages/graphql/src/SortBy/Operators/Field.php @@ -36,8 +36,8 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return $provider->getType(DirectionType::class, $source); + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return $provider->getType(DirectionType::class, $source, $context); } #[Override] diff --git a/packages/graphql/src/SortBy/Operators/Property.php b/packages/graphql/src/SortBy/Operators/Property.php index 5385a9087..01caee66d 100644 --- a/packages/graphql/src/SortBy/Operators/Property.php +++ b/packages/graphql/src/SortBy/Operators/Property.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Laravel\Scout\Builder as ScoutBuilder; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Directives\PropertyDirective; @@ -15,8 +16,8 @@ class Property extends PropertyDirective implements Operator { #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source): string { - return $provider->getType(Clause::class, $source); + public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + return $provider->getType(Clause::class, $source, $context); } #[Override] diff --git a/packages/graphql/src/SortBy/Types/Clause.php b/packages/graphql/src/SortBy/Types/Clause.php index 4e1be2174..33ad39d09 100644 --- a/packages/graphql/src/SortBy/Types/Clause.php +++ b/packages/graphql/src/SortBy/Types/Clause.php @@ -9,6 +9,7 @@ use GraphQL\Type\Definition\InputObjectType; use GraphQL\Type\Definition\InterfaceType; use GraphQL\Type\Definition\ObjectType; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator as OperatorContract; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator; @@ -35,7 +36,7 @@ class Clause extends InputObject { #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source): string { + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { $directiveName = Directive::Name; $builderName = $manipulator->getBuilderInfo()->getName(); $typeName = $source->getTypeName(); @@ -52,6 +53,7 @@ protected function getScope(): string { protected function getDescription( Manipulator $manipulator, InputSource|ObjectSource|InterfaceSource $source, + Context $context, ): string { return "Sort clause for `{$source}` (only one property allowed at a time)."; } @@ -63,11 +65,12 @@ protected function getDescription( protected function getOperators( Manipulator $manipulator, InputSource|ObjectSource|InterfaceSource $source, + Context $context, ): array { return array_values( array_unique( array_merge( - parent::getOperators($manipulator, $source), + parent::getOperators($manipulator, $source, $context), $manipulator->getTypeOperators($this->getScope(), Operators::Extra), ), SORT_REGULAR, @@ -79,9 +82,10 @@ protected function getOperators( protected function isFieldConvertable( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): bool { // Parent? - if (!parent::isFieldConvertable($manipulator, $field)) { + if (!parent::isFieldConvertable($manipulator, $field, $context)) { return false; } @@ -113,6 +117,7 @@ protected function isFieldConvertable( protected function getFieldOperator( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): ?array { $fieldType = $field->getTypeDefinition(); $isNested = $fieldType instanceof InputObjectTypeDefinitionNode @@ -125,9 +130,9 @@ protected function getFieldOperator( $source = null; if ($isNested) { - $operator = $this->getObjectDefaultOperator($manipulator, $field); + $operator = $this->getObjectDefaultOperator($manipulator, $field, $context); } else { - $type = $manipulator->getType(Direction::class, $field); + $type = $manipulator->getType(Direction::class, $field, $context); $source = $manipulator->getTypeSource(Parser::typeReference($type)); $operator = $manipulator->getOperator($this->getScope(), SortByOperatorFieldDirective::class); } @@ -138,8 +143,9 @@ protected function getFieldOperator( protected function getObjectDefaultOperator( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, + Context $context, ): OperatorContract { - return parent::getFieldDirectiveOperator(Operator::class, $manipulator, $field) + return parent::getFieldDirectiveOperator(Operator::class, $manipulator, $field, $context) ?? $manipulator->getOperator($this->getScope(), SortByOperatorPropertyDirective::class); } } diff --git a/packages/graphql/src/SortBy/Types/Direction.php b/packages/graphql/src/SortBy/Types/Direction.php index 0480c7081..5f8a7397a 100644 --- a/packages/graphql/src/SortBy/Types/Direction.php +++ b/packages/graphql/src/SortBy/Types/Direction.php @@ -5,6 +5,7 @@ use GraphQL\Language\AST\TypeDefinitionNode; use GraphQL\Type\Definition\PhpEnumType; use GraphQL\Type\Definition\Type; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator; @@ -18,7 +19,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source): string { + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { return Directive::Name.'TypeDirection'; } @@ -26,6 +27,7 @@ public function getTypeName(Manipulator $manipulator, TypeSource $source): strin public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null { return new PhpEnumType(DirectionEnum::class, $name); diff --git a/packages/graphql/src/SortBy/Types/Flag.php b/packages/graphql/src/SortBy/Types/Flag.php index 1d42a9f10..eca9a440d 100644 --- a/packages/graphql/src/SortBy/Types/Flag.php +++ b/packages/graphql/src/SortBy/Types/Flag.php @@ -5,6 +5,7 @@ use GraphQL\Language\AST\TypeDefinitionNode; use GraphQL\Type\Definition\PhpEnumType; use GraphQL\Type\Definition\Type; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Enums\Flag as FlagEnum; @@ -18,7 +19,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source): string { + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { return Directive::Name.'TypeFlag'; } @@ -26,6 +27,7 @@ public function getTypeName(Manipulator $manipulator, TypeSource $source): strin public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null { return new PhpEnumType(FlagEnum::class, $name); diff --git a/packages/graphql/src/Stream/Directives/Directive.php b/packages/graphql/src/Stream/Directives/Directive.php index 12b772f27..a29c2aaa8 100644 --- a/packages/graphql/src/Stream/Directives/Directive.php +++ b/packages/graphql/src/Stream/Directives/Directive.php @@ -17,6 +17,7 @@ use LastDragon_ru\LaraASP\Eloquent\ModelHelper; use LastDragon_ru\LaraASP\GraphQL\Builder\BuilderInfo; use LastDragon_ru\LaraASP\GraphQL\Builder\BuilderInfoDetector; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\BuilderInfoProvider; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Sources\InterfaceFieldArgumentSource; @@ -282,8 +283,9 @@ public function manipulateFieldDefinition( // Update type $detector = Container::getInstance()->make(BuilderInfoDetector::class); + $context = new Context(); $builder = $detector->getFieldBuilderInfo($documentAST, $parentType, $fieldDefinition); - $type = $this->getManipulator($documentAST, $builder)->getType(StreamType::class, $source); + $type = $this->getManipulator($documentAST, $builder)->getType(StreamType::class, $source, $context); $type = Parser::typeReference("{$type}!"); $manipulator->setFieldType( diff --git a/packages/graphql/src/Stream/Directives/Offset.php b/packages/graphql/src/Stream/Directives/Offset.php index b64b9d345..42988d267 100644 --- a/packages/graphql/src/Stream/Directives/Offset.php +++ b/packages/graphql/src/Stream/Directives/Offset.php @@ -10,6 +10,7 @@ use Illuminate\Container\Container; use LastDragon_ru\LaraASP\Core\Utils\Cast; use LastDragon_ru\LaraASP\GraphQL\Builder\BuilderInfoDetector; +use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Traits\WithManipulator; use LastDragon_ru\LaraASP\GraphQL\Builder\Traits\WithSource; use LastDragon_ru\LaraASP\GraphQL\Stream\Contracts\FieldArgumentDirective; @@ -66,8 +67,9 @@ public function manipulateArgDefinition( $detector = Container::getInstance()->make(BuilderInfoDetector::class); $builder = $detector->getFieldBuilderInfo($documentAST, $parentType, $parentField); $manipulator = $this->getManipulator($documentAST, $builder); + $context = new Context(); $source = $this->getFieldArgumentSource($manipulator, $parentType, $parentField, $argDefinition); - $type = Parser::typeReference($manipulator->getType(OffsetType::class, $source)); + $type = Parser::typeReference($manipulator->getType(OffsetType::class, $source, $context)); $manipulator->setArgumentType( $parentType, diff --git a/packages/graphql/src/Stream/Types/Navigation.php b/packages/graphql/src/Stream/Types/Navigation.php index 6c854021a..8a789a96e 100644 --- a/packages/graphql/src/Stream/Types/Navigation.php +++ b/packages/graphql/src/Stream/Types/Navigation.php @@ -5,6 +5,7 @@ use GraphQL\Language\AST\TypeDefinitionNode; use GraphQL\Language\Parser; use GraphQL\Type\Definition\Type; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator; @@ -17,7 +18,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source): string { + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { return Directive::Name.'Navigation'; } @@ -25,9 +26,10 @@ public function getTypeName(Manipulator $manipulator, TypeSource $source): strin public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null { - $offset = $manipulator->getType(Offset::class, $source); + $offset = $manipulator->getType(Offset::class, $source, $context); return Parser::objectTypeDefinition( << // ========================================================================= #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source): string { + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { return $this->name(); } @@ -160,6 +161,7 @@ public function getTypeName(Manipulator $manipulator, TypeSource $source): strin public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null { return $this; diff --git a/packages/graphql/src/Stream/Types/Stream.php b/packages/graphql/src/Stream/Types/Stream.php index 9845cf7cb..58f9e10f7 100644 --- a/packages/graphql/src/Stream/Types/Stream.php +++ b/packages/graphql/src/Stream/Types/Stream.php @@ -6,6 +6,7 @@ use GraphQL\Language\Parser; use GraphQL\Type\Definition\Type; use Illuminate\Support\Str; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; use LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator; @@ -30,7 +31,7 @@ public function getOriginalTypeName(string $type): string { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source): string { + public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { return Str::plural(Str::studly($source->getTypeName())).Directive::Name; } @@ -38,10 +39,11 @@ public function getTypeName(Manipulator $manipulator, TypeSource $source): strin public function getTypeDefinition( Manipulator $manipulator, TypeSource $source, + Context $context, string $name, ): TypeDefinitionNode|Type|null { $type = $source->getTypeName(); - $navigation = $manipulator->getType(Navigation::class, $source); + $navigation = $manipulator->getType(Navigation::class, $source, $context); return Parser::objectTypeDefinition( << Date: Wed, 10 Jan 2024 10:53:55 +0400 Subject: [PATCH 3/8] `Context` will be the last argument. --- packages/graphql/src/Builder/Contracts/Handler.php | 2 +- packages/graphql/src/Builder/Contracts/Operator.php | 2 +- .../src/Builder/Directives/HandlerDirective.php | 10 +++++----- .../src/Builder/Directives/PropertyDirective.php | 4 ++-- packages/graphql/src/Builder/ManipulatorTest.php | 6 +++--- packages/graphql/src/Builder/OperatorsTest.php | 2 +- packages/graphql/src/SearchBy/Directives/Directive.php | 4 ++-- .../graphql/src/SearchBy/Directives/DirectiveTest.php | 2 +- .../src/SearchBy/Operators/Comparison/Between.php | 2 +- .../src/SearchBy/Operators/Comparison/BetweenTest.php | 2 +- .../src/SearchBy/Operators/Comparison/BitwiseAnd.php | 2 +- .../SearchBy/Operators/Comparison/BitwiseAndTest.php | 2 +- .../SearchBy/Operators/Comparison/BitwiseLeftShift.php | 2 +- .../Operators/Comparison/BitwiseLeftShiftTest.php | 2 +- .../src/SearchBy/Operators/Comparison/BitwiseOr.php | 2 +- .../SearchBy/Operators/Comparison/BitwiseOrTest.php | 2 +- .../Operators/Comparison/BitwiseRightShift.php | 2 +- .../Operators/Comparison/BitwiseRightShiftTest.php | 2 +- .../src/SearchBy/Operators/Comparison/BitwiseXor.php | 2 +- .../SearchBy/Operators/Comparison/BitwiseXorTest.php | 2 +- .../src/SearchBy/Operators/Comparison/Contains.php | 2 +- .../src/SearchBy/Operators/Comparison/ContainsTest.php | 2 +- .../src/SearchBy/Operators/Comparison/EndsWithTest.php | 2 +- .../src/SearchBy/Operators/Comparison/Equal.php | 2 +- .../src/SearchBy/Operators/Comparison/EqualTest.php | 4 ++-- .../src/SearchBy/Operators/Comparison/GreaterThan.php | 2 +- .../Operators/Comparison/GreaterThanOrEqual.php | 2 +- .../Operators/Comparison/GreaterThanOrEqualTest.php | 2 +- .../SearchBy/Operators/Comparison/GreaterThanTest.php | 2 +- .../graphql/src/SearchBy/Operators/Comparison/In.php | 2 +- .../src/SearchBy/Operators/Comparison/InTest.php | 4 ++-- .../src/SearchBy/Operators/Comparison/IsNotNull.php | 2 +- .../SearchBy/Operators/Comparison/IsNotNullTest.php | 2 +- .../src/SearchBy/Operators/Comparison/IsNull.php | 2 +- .../src/SearchBy/Operators/Comparison/IsNullTest.php | 2 +- .../src/SearchBy/Operators/Comparison/LessThan.php | 2 +- .../SearchBy/Operators/Comparison/LessThanOrEqual.php | 2 +- .../Operators/Comparison/LessThanOrEqualTest.php | 2 +- .../src/SearchBy/Operators/Comparison/LessThanTest.php | 2 +- .../graphql/src/SearchBy/Operators/Comparison/Like.php | 2 +- .../src/SearchBy/Operators/Comparison/LikeTest.php | 2 +- .../src/SearchBy/Operators/Comparison/NotBetween.php | 2 +- .../SearchBy/Operators/Comparison/NotBetweenTest.php | 2 +- .../SearchBy/Operators/Comparison/NotContainsTest.php | 2 +- .../SearchBy/Operators/Comparison/NotEndsWithTest.php | 2 +- .../src/SearchBy/Operators/Comparison/NotEqual.php | 2 +- .../src/SearchBy/Operators/Comparison/NotEqualTest.php | 2 +- .../src/SearchBy/Operators/Comparison/NotIn.php | 2 +- .../src/SearchBy/Operators/Comparison/NotInTest.php | 4 ++-- .../src/SearchBy/Operators/Comparison/NotLike.php | 2 +- .../src/SearchBy/Operators/Comparison/NotLikeTest.php | 2 +- .../Operators/Comparison/NotStartsWithTest.php | 2 +- .../SearchBy/Operators/Comparison/StartsWithTest.php | 2 +- .../src/SearchBy/Operators/Complex/Relation.php | 6 +++--- .../src/SearchBy/Operators/Complex/RelationTest.php | 2 +- .../graphql/src/SearchBy/Operators/Logical/AllOf.php | 6 +++--- .../src/SearchBy/Operators/Logical/AllOfTest.php | 4 ++-- .../src/SearchBy/Operators/Logical/AnyOfTest.php | 2 +- .../graphql/src/SearchBy/Operators/Logical/Logical.php | 4 ++-- .../graphql/src/SearchBy/Operators/Logical/NotTest.php | 2 +- packages/graphql/src/SortBy/Operators/Extra/Random.php | 2 +- .../graphql/src/SortBy/Operators/Extra/RandomTest.php | 2 +- packages/graphql/src/SortBy/Operators/Field.php | 2 +- packages/graphql/src/SortBy/Operators/FieldTest.php | 8 ++++---- 64 files changed, 84 insertions(+), 84 deletions(-) diff --git a/packages/graphql/src/Builder/Contracts/Handler.php b/packages/graphql/src/Builder/Contracts/Handler.php index 69f7abc8d..0d63c7519 100644 --- a/packages/graphql/src/Builder/Contracts/Handler.php +++ b/packages/graphql/src/Builder/Contracts/Handler.php @@ -13,5 +13,5 @@ interface Handler { * * @return TBuilder */ - public function handle(Context $context, object $builder, Property $property, ArgumentSet $conditions): object; + public function handle(object $builder, Property $property, ArgumentSet $conditions, Context $context): object; } diff --git a/packages/graphql/src/Builder/Contracts/Operator.php b/packages/graphql/src/Builder/Contracts/Operator.php index 31a49fa20..d4a681178 100644 --- a/packages/graphql/src/Builder/Contracts/Operator.php +++ b/packages/graphql/src/Builder/Contracts/Operator.php @@ -33,9 +33,9 @@ public function isBuilderSupported(string $builder): bool; */ public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object; } diff --git a/packages/graphql/src/Builder/Directives/HandlerDirective.php b/packages/graphql/src/Builder/Directives/HandlerDirective.php index 0d8ae7884..8b901a2ca 100644 --- a/packages/graphql/src/Builder/Directives/HandlerDirective.php +++ b/packages/graphql/src/Builder/Directives/HandlerDirective.php @@ -101,7 +101,7 @@ protected function handleAnyBuilder(object $builder, mixed $value, ContextContra foreach ($conditions as $condition) { if ($condition instanceof ArgumentSet) { - $builder = $this->handle($context ?? new Context(), $builder, new Property(), $condition); + $builder = $this->handle($builder, new Property(), $condition, $context ?? new Context()); } else { throw new HandlerInvalidConditions($this); } @@ -120,10 +120,10 @@ protected function handleAnyBuilder(object $builder, mixed $value, ContextContra */ #[Override] public function handle( - ContextContract $context, object $builder, Property $property, ArgumentSet $conditions, + ContextContract $context, ): object { // Empty? if (count($conditions->arguments) === 0) { @@ -138,7 +138,7 @@ public function handle( } // Call - return $this->call($context, $builder, $property, $conditions); + return $this->call($builder, $property, $conditions, $context); } /** @@ -149,10 +149,10 @@ public function handle( * @return T */ protected function call( - ContextContract $context, object $builder, Property $property, ArgumentSet $operator, + ContextContract $context, ): object { // Arguments? if (count($operator->arguments) > 1) { @@ -196,7 +196,7 @@ static function (Operator $operator): string { } // Return - return $op->call($this, $context, $builder, $property, $value); + return $op->call($this, $builder, $property, $value, $context); } // diff --git a/packages/graphql/src/Builder/Directives/PropertyDirective.php b/packages/graphql/src/Builder/Directives/PropertyDirective.php index c71140309..ccf72ee5c 100644 --- a/packages/graphql/src/Builder/Directives/PropertyDirective.php +++ b/packages/graphql/src/Builder/Directives/PropertyDirective.php @@ -36,10 +36,10 @@ public function isBuilderSupported(string $builder): bool { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($argument->value instanceof ArgumentSet)) { throw new HandlerInvalidConditions($handler); @@ -58,6 +58,6 @@ public function call( } // Apply - return $handler->handle($context, $builder, $property, $argument->value); + return $handler->handle($builder, $property, $argument->value, $context); } } diff --git a/packages/graphql/src/Builder/ManipulatorTest.php b/packages/graphql/src/Builder/ManipulatorTest.php index acfe985d5..e76e12b83 100644 --- a/packages/graphql/src/Builder/ManipulatorTest.php +++ b/packages/graphql/src/Builder/ManipulatorTest.php @@ -398,10 +398,10 @@ public function isBuilderSupported(string $builder): bool { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { return $builder; } @@ -435,10 +435,10 @@ public function isBuilderSupported(string $builder): bool { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { return $builder; } @@ -472,10 +472,10 @@ public function isBuilderSupported(string $builder): bool { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { return $builder; } diff --git a/packages/graphql/src/Builder/OperatorsTest.php b/packages/graphql/src/Builder/OperatorsTest.php index a35f4697f..11b075238 100644 --- a/packages/graphql/src/Builder/OperatorsTest.php +++ b/packages/graphql/src/Builder/OperatorsTest.php @@ -186,10 +186,10 @@ public function isBuilderSupported(string $builder): bool { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { throw new Exception('Should not be called'); } diff --git a/packages/graphql/src/SearchBy/Directives/Directive.php b/packages/graphql/src/SearchBy/Directives/Directive.php index b29069dcf..8f70f082c 100644 --- a/packages/graphql/src/SearchBy/Directives/Directive.php +++ b/packages/graphql/src/SearchBy/Directives/Directive.php @@ -81,7 +81,7 @@ protected function getArgDefinitionType( // // ========================================================================= #[Override] - public function handle(Context $context, object $builder, Property $property, ArgumentSet $conditions): object { + public function handle(object $builder, Property $property, ArgumentSet $conditions, Context $context): object { // Some relations (eg `HasManyThrough`) require a table name prefix to // avoid "SQLSTATE[23000]: Integrity constraint violation: 1052 Column // 'xxx' in where clause is ambiguous" error. @@ -90,7 +90,7 @@ public function handle(Context $context, object $builder, Property $property, Ar } // Return - return parent::handle($context, $builder, $property, $conditions); + return parent::handle($builder, $property, $conditions, $context); } // } diff --git a/packages/graphql/src/SearchBy/Directives/DirectiveTest.php b/packages/graphql/src/SearchBy/Directives/DirectiveTest.php index 646b55ce3..ee4320ce2 100644 --- a/packages/graphql/src/SearchBy/Directives/DirectiveTest.php +++ b/packages/graphql/src/SearchBy/Directives/DirectiveTest.php @@ -434,10 +434,10 @@ public static function definition(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { throw new Exception('should not be called'); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/Between.php b/packages/graphql/src/SearchBy/Operators/Comparison/Between.php index 3b9bee7f3..bd9d5ad36 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/Between.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/Between.php @@ -35,10 +35,10 @@ public function getFieldType(TypeProvider $provider, TypeSource $source, Context #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BetweenTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BetweenTest.php index c6820f1ff..a20ecb6b9 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BetweenTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BetweenTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAnd.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAnd.php index 19bf0fffa..b34791617 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAnd.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAnd.php @@ -26,10 +26,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAndTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAndTest.php index eb2864eae..3cab7b3ba 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAndTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseAndTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShift.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShift.php index 569ff9437..70ddb2aef 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShift.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShift.php @@ -26,10 +26,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShiftTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShiftTest.php index bc13edeb7..a8a681a90 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShiftTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseLeftShiftTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOr.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOr.php index abd014bd5..1f7a0f403 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOr.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOr.php @@ -26,10 +26,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOrTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOrTest.php index 01aca7b54..6659b886c 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOrTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseOrTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShift.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShift.php index c4db3f649..6bacfca33 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShift.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShift.php @@ -26,10 +26,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShiftTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShiftTest.php index 05c9d7451..0f7f416d4 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShiftTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseRightShiftTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXor.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXor.php index 9bc7af80b..ba7e1f92c 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXor.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXor.php @@ -26,10 +26,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXorTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXorTest.php index f22afcf8f..4f6826c2a 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXorTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/BitwiseXorTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/Contains.php b/packages/graphql/src/SearchBy/Operators/Comparison/Contains.php index 0ae3c8820..ed7dabf4e 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/Contains.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/Contains.php @@ -31,10 +31,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/ContainsTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/ContainsTest.php index 5b383c78b..8e3ab434f 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/ContainsTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/ContainsTest.php @@ -59,7 +59,7 @@ public function testCall( $argument = $argumentFactory($this); $context = new Context(); $search = Mockery::mock(Handler::class); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/EndsWithTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/EndsWithTest.php index 914bcf686..c15d57d31 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/EndsWithTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/EndsWithTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/Equal.php b/packages/graphql/src/SearchBy/Operators/Comparison/Equal.php index dfd04292f..4c71b0d24 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/Equal.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/Equal.php @@ -30,10 +30,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { $property = $property->getParent(); $value = $argument->toPlain(); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php index de6ca2c4c..96c88607b 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php @@ -50,7 +50,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } @@ -80,7 +80,7 @@ public function testCallScout( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertScoutQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThan.php b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThan.php index 82e4737e8..de0f785ee 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThan.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThan.php @@ -26,10 +26,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqual.php b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqual.php index 3d588b38e..c9e1a0aa4 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqual.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqual.php @@ -26,10 +26,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqualTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqualTest.php index 21ef7232f..7668d4f6a 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqualTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanOrEqualTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanTest.php index d76c229cc..819a54947 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/GreaterThanTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/In.php b/packages/graphql/src/SearchBy/Operators/Comparison/In.php index 7db259283..38976533a 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/In.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/In.php @@ -37,10 +37,10 @@ public function getFieldType(TypeProvider $provider, TypeSource $source, Context #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { $property = $property->getParent(); $value = (array) $argument->toPlain(); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php index dd43a85b9..f8cec74a9 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php @@ -50,7 +50,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } @@ -80,7 +80,7 @@ public function testCallScout( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertScoutQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php b/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php index d8c153e37..c74bb417e 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNull.php @@ -37,10 +37,10 @@ public function getFieldType(TypeProvider $provider, TypeSource $source, Context #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNullTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNullTest.php index 6563ae88b..a4e42a229 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNullTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/IsNotNullTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php b/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php index f1f8dc6f5..ebc95d475 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/IsNull.php @@ -37,10 +37,10 @@ public function getFieldType(TypeProvider $provider, TypeSource $source, Context #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/IsNullTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/IsNullTest.php index ecf80e4eb..91e34fd6b 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/IsNullTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/IsNullTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/LessThan.php b/packages/graphql/src/SearchBy/Operators/Comparison/LessThan.php index 0b6473559..a85a8e42a 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/LessThan.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/LessThan.php @@ -26,10 +26,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqual.php b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqual.php index edf2ac39c..4b0da4e8b 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqual.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqual.php @@ -26,10 +26,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqualTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqualTest.php index 6ed09951a..20cc15c3a 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqualTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanOrEqualTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanTest.php index 83a9458df..87453e6de 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/LessThanTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/LessThanTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/Like.php b/packages/graphql/src/SearchBy/Operators/Comparison/Like.php index 10a46c6ec..0d9fe4fab 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/Like.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/Like.php @@ -27,10 +27,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/LikeTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/LikeTest.php index f0b20e405..06a4fc191 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/LikeTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/LikeTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotBetween.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotBetween.php index e52931afe..d5a2feb45 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotBetween.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotBetween.php @@ -26,10 +26,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotBetweenTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotBetweenTest.php index aab16e3f1..4ba2a1fec 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotBetweenTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotBetweenTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotContainsTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotContainsTest.php index 6307e49fc..6d8ee1ae3 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotContainsTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotContainsTest.php @@ -59,7 +59,7 @@ public function testCall( $argument = $argumentFactory($this); $context = new Context(); $search = Mockery::mock(Handler::class); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotEndsWithTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotEndsWithTest.php index 778e47828..706481610 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotEndsWithTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotEndsWithTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotEqual.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotEqual.php index 8701f66cd..e29707c10 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotEqual.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotEqual.php @@ -26,10 +26,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotEqualTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotEqualTest.php index b62ab18ce..a7446b5c6 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotEqualTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotEqualTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php index 348b9d684..6ea64c2f4 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotIn.php @@ -41,10 +41,10 @@ protected function getScoutVersion(): ?string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { $property = $property->getParent(); $value = (array) $argument->toPlain(); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php index 900fa404e..43cdb61ca 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php @@ -52,7 +52,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } @@ -94,7 +94,7 @@ public function testCallScout( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertScoutQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotLike.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotLike.php index b1ee6ce36..5af279c48 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotLike.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotLike.php @@ -27,10 +27,10 @@ public function getFieldDescription(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotLikeTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotLikeTest.php index d300c8378..b47e5189c 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotLikeTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotLikeTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotStartsWithTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotStartsWithTest.php index cdb70c5ba..640dd1b13 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotStartsWithTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotStartsWithTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/StartsWithTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/StartsWithTest.php index ec57c0f6c..362fe32e6 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/StartsWithTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/StartsWithTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Complex/Relation.php b/packages/graphql/src/SearchBy/Operators/Complex/Relation.php index 6efb3f708..871d58c17 100644 --- a/packages/graphql/src/SearchBy/Operators/Complex/Relation.php +++ b/packages/graphql/src/SearchBy/Operators/Complex/Relation.php @@ -68,10 +68,10 @@ public function isBuilderSupported(string $builder): bool { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { // Supported? if (!($builder instanceof EloquentBuilder)) { @@ -102,7 +102,7 @@ public function call( if ($hasCount instanceof Argument) { $query = $builder->getQuery()->newQuery(); - $query = $this->property->call($handler, $context, $query, new Property(), $hasCount); + $query = $this->property->call($handler, $query, new Property(), $hasCount, $context); $where = reset($query->wheres); $count = $where['value'] ?? $count; $operator = $where['operator'] ?? $operator; @@ -125,7 +125,7 @@ static function (EloquentBuilder $builder) use ($context, $relation, $handler, $ } if ($has instanceof Argument && $has->value instanceof ArgumentSet) { - $handler->handle($context, $builder, new Property($alias), $has->value); + $handler->handle($builder, new Property($alias), $has->value, $context); } }, ); diff --git a/packages/graphql/src/SearchBy/Operators/Complex/RelationTest.php b/packages/graphql/src/SearchBy/Operators/Complex/RelationTest.php index b8eee73ea..f6ed6c632 100644 --- a/packages/graphql/src/SearchBy/Operators/Complex/RelationTest.php +++ b/packages/graphql/src/SearchBy/Operators/Complex/RelationTest.php @@ -50,7 +50,7 @@ public function testCall( $context = new Context(); $search = Container::getInstance()->make(Directive::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); if (is_array($expected)) { self::assertDatabaseQueryEquals($expected, $builder); diff --git a/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php b/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php index c2fc0753e..7e37abbe8 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php @@ -42,14 +42,14 @@ protected function getBoolean(): string { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { // Scout? if (!($builder instanceof ScoutBuilder)) { - return parent::call($handler, $context, $builder, $property, $argument); + return parent::call($handler, $builder, $property, $argument, $context); } // Build @@ -57,7 +57,7 @@ public function call( $conditions = $this->getConditions($argument); foreach ($conditions as $arguments) { - $handler->handle($context, $builder, $property, $arguments); + $handler->handle($builder, $property, $arguments, $context); } // Return diff --git a/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php b/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php index 1514b7563..66c40326d 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php @@ -52,7 +52,7 @@ public function testCall( $context = new Context(); $search = Container::getInstance()->make(Directive::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } @@ -82,7 +82,7 @@ public function testCallScout( $context = new Context(); $search = Container::getInstance()->make(Directive::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertScoutQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Logical/AnyOfTest.php b/packages/graphql/src/SearchBy/Operators/Logical/AnyOfTest.php index 03402b51a..f9305c07e 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/AnyOfTest.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/AnyOfTest.php @@ -45,7 +45,7 @@ public function testCall( $context = new Context(); $search = Container::getInstance()->make(Directive::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SearchBy/Operators/Logical/Logical.php b/packages/graphql/src/SearchBy/Operators/Logical/Logical.php index 17b4ebe6c..168f31130 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/Logical.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/Logical.php @@ -30,10 +30,10 @@ public function getFieldType(TypeProvider $provider, TypeSource $source, Context #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); @@ -53,7 +53,7 @@ static function (EloquentBuilder|QueryBuilder $builder) use ( $arguments, $property, ): void { - $handler->handle($context, $builder, $property, $arguments); + $handler->handle($builder, $property, $arguments, $context); }, null, null, diff --git a/packages/graphql/src/SearchBy/Operators/Logical/NotTest.php b/packages/graphql/src/SearchBy/Operators/Logical/NotTest.php index b5195baa3..43dedfaae 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/NotTest.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/NotTest.php @@ -45,7 +45,7 @@ public function testCall( $context = new Context(); $search = Container::getInstance()->make(Directive::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SortBy/Operators/Extra/Random.php b/packages/graphql/src/SortBy/Operators/Extra/Random.php index be102051b..cc3b24d6e 100644 --- a/packages/graphql/src/SortBy/Operators/Extra/Random.php +++ b/packages/graphql/src/SortBy/Operators/Extra/Random.php @@ -59,10 +59,10 @@ public function isBuilderSupported(string $builder): bool { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { if (!($builder instanceof EloquentBuilder || $builder instanceof QueryBuilder)) { throw new OperatorUnsupportedBuilder($this, $builder); diff --git a/packages/graphql/src/SortBy/Operators/Extra/RandomTest.php b/packages/graphql/src/SortBy/Operators/Extra/RandomTest.php index 34361992b..920cd39a3 100644 --- a/packages/graphql/src/SortBy/Operators/Extra/RandomTest.php +++ b/packages/graphql/src/SortBy/Operators/Extra/RandomTest.php @@ -43,7 +43,7 @@ public function testCall( $context = new Context(); $search = Mockery::mock(Handler::class); $builder = $builderFactory($this); - $builder = $operator->call($search, $context, $builder, $property, $argument); + $builder = $operator->call($search, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } diff --git a/packages/graphql/src/SortBy/Operators/Field.php b/packages/graphql/src/SortBy/Operators/Field.php index 5f2d892b4..3d0efab1e 100644 --- a/packages/graphql/src/SortBy/Operators/Field.php +++ b/packages/graphql/src/SortBy/Operators/Field.php @@ -53,10 +53,10 @@ public function isBuilderSupported(string $builder): bool { #[Override] public function call( Handler $handler, - Context $context, object $builder, Property $property, Argument $argument, + Context $context, ): object { $sorter = $this->factory->create($builder); diff --git a/packages/graphql/src/SortBy/Operators/FieldTest.php b/packages/graphql/src/SortBy/Operators/FieldTest.php index b88a8d7ec..bdd600f04 100644 --- a/packages/graphql/src/SortBy/Operators/FieldTest.php +++ b/packages/graphql/src/SortBy/Operators/FieldTest.php @@ -57,7 +57,7 @@ public function testCall( $directive = Container::getInstance()->make(Directive::class); $context = new Context(); $builder = $builderFactory($this); - $builder = $operator->call($directive, $context, $builder, $property, $argument); + $builder = $operator->call($directive, $builder, $property, $argument, $context); self::assertDatabaseQueryEquals($expected, $builder); } @@ -87,7 +87,7 @@ public function testCallEloquentBuilder(): void { $context = new Context(); $builder = Mockery::mock(EloquentBuilder::class); - $operator->call($directive, $context, $builder, $property, $argument); + $operator->call($directive, $builder, $property, $argument, $context); } public function testCallQueryBuilder(): void { @@ -113,7 +113,7 @@ public function testCallQueryBuilder(): void { $context = new Context(); $builder = Mockery::mock(QueryBuilder::class); - $operator->call($directive, $context, $builder, $property, $argument); + $operator->call($directive, $builder, $property, $argument, $context); } public function testCallScoutBuilder(): void { @@ -140,7 +140,7 @@ public function testCallScoutBuilder(): void { $context = new Context(); $builder = Mockery::mock(ScoutBuilder::class); - $operator->call($directive, $context, $builder, $property, $argument); + $operator->call($directive, $builder, $property, $argument, $context); } /** From b98787dbb56bde46e59fa53048e3916a0bcaacbb Mon Sep 17 00:00:00 2001 From: Aleksei Lebedev <1329824+LastDragon-ru@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:09:32 +0400 Subject: [PATCH 4/8] Added `Context::has()`. --- packages/graphql/src/Builder/Context.php | 5 +++++ packages/graphql/src/Builder/Contracts/Context.php | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/packages/graphql/src/Builder/Context.php b/packages/graphql/src/Builder/Context.php index 6d3c6c076..6a22f4148 100644 --- a/packages/graphql/src/Builder/Context.php +++ b/packages/graphql/src/Builder/Context.php @@ -18,6 +18,11 @@ public function __construct() { // empty } + #[Override] + public function has(string $key): bool { + return isset($this->context[$key]) && $this->context[$key] instanceof $key; + } + #[Override] public function get(string $key): mixed { return isset($this->context[$key]) && $this->context[$key] instanceof $key diff --git a/packages/graphql/src/Builder/Contracts/Context.php b/packages/graphql/src/Builder/Contracts/Context.php index c3e8de7ee..8aaa15e99 100644 --- a/packages/graphql/src/Builder/Contracts/Context.php +++ b/packages/graphql/src/Builder/Contracts/Context.php @@ -3,6 +3,11 @@ namespace LastDragon_ru\LaraASP\GraphQL\Builder\Contracts; interface Context { + /** + * @param class-string $key + */ + public function has(string $key): bool; + /** * @template T of object * From 2866d765e2d1d0eba2edb6b9d48bdddded4bad5d Mon Sep 17 00:00:00 2001 From: Aleksei Lebedev <1329824+LastDragon-ru@users.noreply.github.com> Date: Wed, 10 Jan 2024 13:22:45 +0400 Subject: [PATCH 5/8] Added `AstManipulation` context. --- .../src/Builder/Contexts/AstManipulation.php | 13 +++++++++++++ .../src/Builder/Directives/HandlerDirective.php | 10 +++++++++- .../src/SearchBy/Operators/Complex/RelationType.php | 3 ++- packages/graphql/src/SearchBy/Types/Condition.php | 3 ++- packages/graphql/src/SearchBy/Types/Enumeration.php | 3 ++- packages/graphql/src/SearchBy/Types/Scalar.php | 3 ++- packages/graphql/src/SortBy/Types/Clause.php | 3 ++- 7 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 packages/graphql/src/Builder/Contexts/AstManipulation.php diff --git a/packages/graphql/src/Builder/Contexts/AstManipulation.php b/packages/graphql/src/Builder/Contexts/AstManipulation.php new file mode 100644 index 000000000..e0f3a5e38 --- /dev/null +++ b/packages/graphql/src/Builder/Contexts/AstManipulation.php @@ -0,0 +1,13 @@ +override([ + AstManipulation::class => new AstManipulation( + builderInfo: $builder, + ), + ]); $source = $this->getFieldArgumentSource($manipulator, $parentType, $parentField, $argDefinition); $type = $this->getArgDefinitionType($manipulator, $documentAST, $source, $context); diff --git a/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php b/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php index 96d67baef..a0e73ca50 100644 --- a/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php +++ b/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php @@ -6,6 +6,7 @@ use GraphQL\Language\Parser; use GraphQL\Type\Definition\Type; use Illuminate\Support\Str; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contexts\AstManipulation; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -23,7 +24,7 @@ public function __construct() { #[Override] public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { $typeName = $source->getTypeName(); - $builderName = $manipulator->getBuilderInfo()->getName(); + $builderName = $context->get(AstManipulation::class)?->builderInfo->getName() ?? 'Unknown'; $operatorName = Str::studly(Relation::getName()); $directiveName = Directive::Name; diff --git a/packages/graphql/src/SearchBy/Types/Condition.php b/packages/graphql/src/SearchBy/Types/Condition.php index 283071c29..021107115 100644 --- a/packages/graphql/src/SearchBy/Types/Condition.php +++ b/packages/graphql/src/SearchBy/Types/Condition.php @@ -13,6 +13,7 @@ use GraphQL\Type\Definition\InterfaceType; use GraphQL\Type\Definition\ObjectType; use GraphQL\Type\Definition\ScalarType; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contexts\AstManipulation; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator as OperatorContract; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -43,7 +44,7 @@ class Condition extends InputObject { #[Override] public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { $typeName = $source->getTypeName(); - $builderName = $manipulator->getBuilderInfo()->getName(); + $builderName = $context->get(AstManipulation::class)?->builderInfo->getName() ?? 'Unknown'; $directiveName = Directive::Name; return "{$directiveName}{$builderName}Condition{$typeName}"; diff --git a/packages/graphql/src/SearchBy/Types/Enumeration.php b/packages/graphql/src/SearchBy/Types/Enumeration.php index d4fe4ab6e..ae439f7e0 100644 --- a/packages/graphql/src/SearchBy/Types/Enumeration.php +++ b/packages/graphql/src/SearchBy/Types/Enumeration.php @@ -5,6 +5,7 @@ use GraphQL\Language\AST\TypeDefinitionNode; use GraphQL\Language\Parser; use GraphQL\Type\Definition\Type; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contexts\AstManipulation; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -21,7 +22,7 @@ public function __construct() { #[Override] public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { $directiveName = Directive::Name; - $builderName = $manipulator->getBuilderInfo()->getName(); + $builderName = $context->get(AstManipulation::class)?->builderInfo->getName() ?? 'Unknown'; $typeName = $source->getTypeName(); $nullable = $source->isNullable() ? 'OrNull' : ''; diff --git a/packages/graphql/src/SearchBy/Types/Scalar.php b/packages/graphql/src/SearchBy/Types/Scalar.php index fb543085b..a3b376905 100644 --- a/packages/graphql/src/SearchBy/Types/Scalar.php +++ b/packages/graphql/src/SearchBy/Types/Scalar.php @@ -5,6 +5,7 @@ use GraphQL\Language\AST\TypeDefinitionNode; use GraphQL\Language\Parser; use GraphQL\Type\Definition\Type; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contexts\AstManipulation; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -21,7 +22,7 @@ public function __construct() { #[Override] public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { $directiveName = Directive::Name; - $builderName = $manipulator->getBuilderInfo()->getName(); + $builderName = $context->get(AstManipulation::class)?->builderInfo->getName() ?? 'Unknown'; $typeName = $source->getTypeName(); $nullable = $source->isNullable() ? 'OrNull' : ''; diff --git a/packages/graphql/src/SortBy/Types/Clause.php b/packages/graphql/src/SortBy/Types/Clause.php index 33ad39d09..f00b639e5 100644 --- a/packages/graphql/src/SortBy/Types/Clause.php +++ b/packages/graphql/src/SortBy/Types/Clause.php @@ -9,6 +9,7 @@ use GraphQL\Type\Definition\InputObjectType; use GraphQL\Type\Definition\InterfaceType; use GraphQL\Type\Definition\ObjectType; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contexts\AstManipulation; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator as OperatorContract; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeSource; @@ -38,7 +39,7 @@ class Clause extends InputObject { #[Override] public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { $directiveName = Directive::Name; - $builderName = $manipulator->getBuilderInfo()->getName(); + $builderName = $context->get(AstManipulation::class)?->builderInfo->getName() ?? 'Unknown'; $typeName = $source->getTypeName(); return "{$directiveName}{$builderName}Clause{$typeName}"; From b496e785964e48e5ba275d216f83a96d89870ee9 Mon Sep 17 00:00:00 2001 From: Aleksei Lebedev <1329824+LastDragon-ru@users.noreply.github.com> Date: Wed, 10 Jan 2024 13:30:39 +0400 Subject: [PATCH 6/8] Removed `TypeDefinition::getTypeName(Manipulator $manipulator)` argument. --- packages/graphql/src/Builder/Contracts/TypeDefinition.php | 2 +- packages/graphql/src/Builder/Manipulator.php | 2 +- packages/graphql/src/Scalars/JsonStringType.php | 2 +- packages/graphql/src/SearchBy/Directives/DirectiveTest.php | 6 +----- .../graphql/src/SearchBy/Operators/Complex/RelationType.php | 2 +- packages/graphql/src/SearchBy/Types/Condition.php | 2 +- packages/graphql/src/SearchBy/Types/Enumeration.php | 2 +- packages/graphql/src/SearchBy/Types/Flag.php | 2 +- packages/graphql/src/SearchBy/Types/Range.php | 2 +- packages/graphql/src/SearchBy/Types/Scalar.php | 2 +- packages/graphql/src/SortBy/Types/Clause.php | 2 +- packages/graphql/src/SortBy/Types/Direction.php | 2 +- packages/graphql/src/SortBy/Types/Flag.php | 2 +- packages/graphql/src/Stream/Types/Navigation.php | 2 +- packages/graphql/src/Stream/Types/Offset.php | 2 +- packages/graphql/src/Stream/Types/Stream.php | 2 +- 16 files changed, 16 insertions(+), 20 deletions(-) diff --git a/packages/graphql/src/Builder/Contracts/TypeDefinition.php b/packages/graphql/src/Builder/Contracts/TypeDefinition.php index ed99ca305..48bd2b073 100644 --- a/packages/graphql/src/Builder/Contracts/TypeDefinition.php +++ b/packages/graphql/src/Builder/Contracts/TypeDefinition.php @@ -12,7 +12,7 @@ interface TypeDefinition { /** * Returns the type name for given Builder and Source. */ - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string; + public function getTypeName(TypeSource $source, Context $context): string; /** * Returns the type definition for given Source if possible. The name must be equal to `$name`. diff --git a/packages/graphql/src/Builder/Manipulator.php b/packages/graphql/src/Builder/Manipulator.php index e35dc879c..882064b18 100644 --- a/packages/graphql/src/Builder/Manipulator.php +++ b/packages/graphql/src/Builder/Manipulator.php @@ -82,7 +82,7 @@ public function getBuilderInfo(): BuilderInfo { public function getType(string $definition, TypeSource $source, Context $context): string { // Exists? $instance = Container::getInstance()->make($definition); - $name = $instance->getTypeName($this, $source, $context); + $name = $instance->getTypeName($source, $context); if ($this->isTypeDefinitionExists($name)) { return $name; diff --git a/packages/graphql/src/Scalars/JsonStringType.php b/packages/graphql/src/Scalars/JsonStringType.php index 1407cab4e..f354e26f5 100644 --- a/packages/graphql/src/Scalars/JsonStringType.php +++ b/packages/graphql/src/Scalars/JsonStringType.php @@ -86,7 +86,7 @@ protected function validate(mixed $value, string $error): string { // // ========================================================================= #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { return $this->name(); } diff --git a/packages/graphql/src/SearchBy/Directives/DirectiveTest.php b/packages/graphql/src/SearchBy/Directives/DirectiveTest.php index ee4320ce2..59f01d906 100644 --- a/packages/graphql/src/SearchBy/Directives/DirectiveTest.php +++ b/packages/graphql/src/SearchBy/Directives/DirectiveTest.php @@ -443,11 +443,7 @@ public function call( } #[Override] - public function getTypeName( - Manipulator $manipulator, - TypeSource $source, - Context $context, - ): string { + public function getTypeName(TypeSource $source, Context $context): string { $directiveName = Directive::Name; $typeName = Str::studly($source->getTypeName()); diff --git a/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php b/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php index a0e73ca50..924d8d458 100644 --- a/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php +++ b/packages/graphql/src/SearchBy/Operators/Complex/RelationType.php @@ -22,7 +22,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { $typeName = $source->getTypeName(); $builderName = $context->get(AstManipulation::class)?->builderInfo->getName() ?? 'Unknown'; $operatorName = Str::studly(Relation::getName()); diff --git a/packages/graphql/src/SearchBy/Types/Condition.php b/packages/graphql/src/SearchBy/Types/Condition.php index 021107115..4e972ec2c 100644 --- a/packages/graphql/src/SearchBy/Types/Condition.php +++ b/packages/graphql/src/SearchBy/Types/Condition.php @@ -42,7 +42,7 @@ class Condition extends InputObject { #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { $typeName = $source->getTypeName(); $builderName = $context->get(AstManipulation::class)?->builderInfo->getName() ?? 'Unknown'; $directiveName = Directive::Name; diff --git a/packages/graphql/src/SearchBy/Types/Enumeration.php b/packages/graphql/src/SearchBy/Types/Enumeration.php index ae439f7e0..ac2983114 100644 --- a/packages/graphql/src/SearchBy/Types/Enumeration.php +++ b/packages/graphql/src/SearchBy/Types/Enumeration.php @@ -20,7 +20,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { $directiveName = Directive::Name; $builderName = $context->get(AstManipulation::class)?->builderInfo->getName() ?? 'Unknown'; $typeName = $source->getTypeName(); diff --git a/packages/graphql/src/SearchBy/Types/Flag.php b/packages/graphql/src/SearchBy/Types/Flag.php index df06e21ba..61d1f75c3 100644 --- a/packages/graphql/src/SearchBy/Types/Flag.php +++ b/packages/graphql/src/SearchBy/Types/Flag.php @@ -19,7 +19,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { return Directive::Name.'TypeFlag'; } diff --git a/packages/graphql/src/SearchBy/Types/Range.php b/packages/graphql/src/SearchBy/Types/Range.php index 1bd08e8c9..e35c7cdb0 100644 --- a/packages/graphql/src/SearchBy/Types/Range.php +++ b/packages/graphql/src/SearchBy/Types/Range.php @@ -18,7 +18,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { $typeName = $source->getTypeName(); $directiveName = Directive::Name; diff --git a/packages/graphql/src/SearchBy/Types/Scalar.php b/packages/graphql/src/SearchBy/Types/Scalar.php index a3b376905..90c6a2cbb 100644 --- a/packages/graphql/src/SearchBy/Types/Scalar.php +++ b/packages/graphql/src/SearchBy/Types/Scalar.php @@ -20,7 +20,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { $directiveName = Directive::Name; $builderName = $context->get(AstManipulation::class)?->builderInfo->getName() ?? 'Unknown'; $typeName = $source->getTypeName(); diff --git a/packages/graphql/src/SortBy/Types/Clause.php b/packages/graphql/src/SortBy/Types/Clause.php index f00b639e5..3f28a99d4 100644 --- a/packages/graphql/src/SortBy/Types/Clause.php +++ b/packages/graphql/src/SortBy/Types/Clause.php @@ -37,7 +37,7 @@ class Clause extends InputObject { #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { $directiveName = Directive::Name; $builderName = $context->get(AstManipulation::class)?->builderInfo->getName() ?? 'Unknown'; $typeName = $source->getTypeName(); diff --git a/packages/graphql/src/SortBy/Types/Direction.php b/packages/graphql/src/SortBy/Types/Direction.php index 5f8a7397a..ba621e127 100644 --- a/packages/graphql/src/SortBy/Types/Direction.php +++ b/packages/graphql/src/SortBy/Types/Direction.php @@ -19,7 +19,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { return Directive::Name.'TypeDirection'; } diff --git a/packages/graphql/src/SortBy/Types/Flag.php b/packages/graphql/src/SortBy/Types/Flag.php index eca9a440d..93bd2f4a3 100644 --- a/packages/graphql/src/SortBy/Types/Flag.php +++ b/packages/graphql/src/SortBy/Types/Flag.php @@ -19,7 +19,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { return Directive::Name.'TypeFlag'; } diff --git a/packages/graphql/src/Stream/Types/Navigation.php b/packages/graphql/src/Stream/Types/Navigation.php index 8a789a96e..2d26846a2 100644 --- a/packages/graphql/src/Stream/Types/Navigation.php +++ b/packages/graphql/src/Stream/Types/Navigation.php @@ -18,7 +18,7 @@ public function __construct() { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { return Directive::Name.'Navigation'; } diff --git a/packages/graphql/src/Stream/Types/Offset.php b/packages/graphql/src/Stream/Types/Offset.php index aaf513cc8..0c347765f 100644 --- a/packages/graphql/src/Stream/Types/Offset.php +++ b/packages/graphql/src/Stream/Types/Offset.php @@ -153,7 +153,7 @@ protected function decrypt(string $value): string { // // ========================================================================= #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { return $this->name(); } diff --git a/packages/graphql/src/Stream/Types/Stream.php b/packages/graphql/src/Stream/Types/Stream.php index 58f9e10f7..c7145c2b5 100644 --- a/packages/graphql/src/Stream/Types/Stream.php +++ b/packages/graphql/src/Stream/Types/Stream.php @@ -31,7 +31,7 @@ public function getOriginalTypeName(string $type): string { } #[Override] - public function getTypeName(Manipulator $manipulator, TypeSource $source, Context $context): string { + public function getTypeName(TypeSource $source, Context $context): string { return Str::plural(Str::studly($source->getTypeName())).Directive::Name; } From 126b6005c3aba4ef0d3e26b94a8b3d9230f04631 Mon Sep 17 00:00:00 2001 From: Aleksei Lebedev <1329824+LastDragon-ru@users.noreply.github.com> Date: Wed, 10 Jan 2024 14:36:12 +0400 Subject: [PATCH 7/8] Removed `Manipulator::getBuilderInfo()`, and `WithManipulator::getManipulator()`. --- .../Builder/Directives/HandlerDirective.php | 2 +- packages/graphql/src/Builder/Manipulator.php | 35 ++++++----------- .../graphql/src/Builder/ManipulatorTest.php | 38 +++++++++++-------- .../src/Builder/Traits/WithManipulator.php | 13 +------ .../graphql/src/Builder/Types/InputObject.php | 22 +++++++++-- .../graphql/src/SearchBy/Types/Condition.php | 15 ++------ .../src/SearchBy/Types/Enumeration.php | 4 +- .../graphql/src/SearchBy/Types/Scalar.php | 2 +- packages/graphql/src/SortBy/Types/Clause.php | 2 +- .../src/Stream/Directives/Directive.php | 13 +++---- .../src/Stream/Directives/DirectiveTest.php | 8 ++-- .../graphql/src/Stream/Directives/Offset.php | 6 +-- 12 files changed, 76 insertions(+), 84 deletions(-) diff --git a/packages/graphql/src/Builder/Directives/HandlerDirective.php b/packages/graphql/src/Builder/Directives/HandlerDirective.php index ed7500524..e3ff22ad5 100644 --- a/packages/graphql/src/Builder/Directives/HandlerDirective.php +++ b/packages/graphql/src/Builder/Directives/HandlerDirective.php @@ -215,7 +215,7 @@ public function manipulateArgDefinition( // Converted? $detector = Container::getInstance()->make(BuilderInfoDetector::class); $builder = $detector->getFieldArgumentBuilderInfo($documentAST, $parentType, $parentField, $argDefinition); - $manipulator = $this->getManipulator($documentAST, $builder); + $manipulator = $this->getAstManipulator($documentAST); if ($this->isTypeName($manipulator->getTypeName($argDefinition))) { return; diff --git a/packages/graphql/src/Builder/Manipulator.php b/packages/graphql/src/Builder/Manipulator.php index 882064b18..bb0fbf114 100644 --- a/packages/graphql/src/Builder/Manipulator.php +++ b/packages/graphql/src/Builder/Manipulator.php @@ -22,6 +22,7 @@ use GraphQL\Type\Definition\Type; use Illuminate\Container\Container; use Illuminate\Support\Str; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contexts\AstManipulation; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scope; @@ -40,9 +41,7 @@ use LastDragon_ru\LaraASP\GraphQL\Utils\AstManipulator; use Nuwave\Lighthouse\Pagination\PaginateDirective; use Nuwave\Lighthouse\Pagination\PaginationType; -use Nuwave\Lighthouse\Schema\AST\DocumentAST; use Nuwave\Lighthouse\Schema\DirectiveLocator; -use Nuwave\Lighthouse\Schema\TypeRegistry; use Override; use function array_map; @@ -60,22 +59,6 @@ class Manipulator extends AstManipulator implements TypeProvider { */ private array $operators = []; - public function __construct( - DirectiveLocator $directives, - DocumentAST $document, - TypeRegistry $types, - private BuilderInfo $builderInfo, - ) { - parent::__construct($directives, $document, $types); - } - - // - // ========================================================================= - public function getBuilderInfo(): BuilderInfo { - return $this->builderInfo; - } - // - // // ========================================================================= #[Override] @@ -155,7 +138,7 @@ public function getOperator(string $scope, string $operator): Operator { * * @return list */ - public function getTypeOperators(string $scope, string $type, string ...$extras): array { + public function getTypeOperators(string $scope, string $type, Context $context, string ...$extras): array { // Provider? $provider = $this->operators[$scope] ?? null; @@ -163,6 +146,13 @@ public function getTypeOperators(string $scope, string $type, string ...$extras) return []; } + // Builder? + $builder = $context->get(AstManipulation::class)?->builderInfo->getBuilder(); + + if (!$builder) { + return []; + } + // Operators $operators = []; @@ -175,7 +165,7 @@ public function getTypeOperators(string $scope, string $type, string ...$extras) $directiveType = $directive->getType(); if ($type !== $directiveType) { - array_push($operators, ...$this->getTypeOperators($scope, $directiveType)); + array_push($operators, ...$this->getTypeOperators($scope, $directiveType, $context)); } else { array_push($operators, ...$provider->getOperators($type)); } @@ -197,12 +187,11 @@ public function getTypeOperators(string $scope, string $type, string ...$extras) // Extra foreach ($extras as $extra) { - array_push($operators, ...$this->getTypeOperators($scope, $extra)); + array_push($operators, ...$this->getTypeOperators($scope, $extra, $context)); } // Unique - $builder = $this->getBuilderInfo()->getBuilder(); - $unique = []; + $unique = []; foreach ($operators as $operator) { if (isset($unique[$operator::class])) { diff --git a/packages/graphql/src/Builder/ManipulatorTest.php b/packages/graphql/src/Builder/ManipulatorTest.php index e76e12b83..3503261c2 100644 --- a/packages/graphql/src/Builder/ManipulatorTest.php +++ b/packages/graphql/src/Builder/ManipulatorTest.php @@ -5,7 +5,8 @@ use GraphQL\Type\Definition\CustomScalarType; use GraphQL\Type\Definition\ObjectType; use Illuminate\Container\Container; -use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contexts\AstManipulation; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context as ContextContract; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scope; @@ -191,10 +192,14 @@ public function getScope(): string { }; // Manipulator + $context = (new Context())->override([ + AstManipulation::class => new AstManipulation( + builderInfo: new BuilderInfo($builder::class, $builder::class), + ), + ]); $document = Container::getInstance()->make(ASTBuilder::class)->documentAST(); $manipulator = Container::getInstance()->make(Manipulator::class, [ - 'document' => $document, - 'builderInfo' => new BuilderInfo($builder::class, $builder::class), + 'document' => $document, ]); $manipulator->addOperators($operators); @@ -208,39 +213,42 @@ public function getScope(): string { [ $aOperator, ], - array_map($map, $manipulator->getTypeOperators($operators->getScope(), Operators::ID)), + array_map($map, $manipulator->getTypeOperators($operators->getScope(), Operators::ID, $context)), ); self::assertEquals( [ $aOperator, $cOperator, ], - array_map($map, $manipulator->getTypeOperators($operators->getScope(), Operators::ID, Operators::Int)), + array_map( + $map, + $manipulator->getTypeOperators($operators->getScope(), Operators::ID, $context, Operators::Int), + ), ); self::assertEquals( [ // empty (another scope) ], - array_map($map, $manipulator->getTypeOperators($scope::class, Operators::ID)), + array_map($map, $manipulator->getTypeOperators($scope::class, Operators::ID, $context)), ); self::assertEquals( [ $aOperator, ], - array_map($map, $manipulator->getTypeOperators($operators->getScope(), 'TestScalar')), + array_map($map, $manipulator->getTypeOperators($operators->getScope(), 'TestScalar', $context)), ); self::assertEquals( [ $aOperator, ], - array_map($map, $manipulator->getTypeOperators($operators->getScope(), 'TestOperators')), + array_map($map, $manipulator->getTypeOperators($operators->getScope(), 'TestOperators', $context)), ); self::assertEquals( [ $cOperator, $aOperator, ], - array_map($map, $manipulator->getTypeOperators($operators->getScope(), 'TestBuiltinOperators')), + array_map($map, $manipulator->getTypeOperators($operators->getScope(), 'TestBuiltinOperators', $context)), ); } // @@ -381,7 +389,7 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + public function getFieldType(TypeProvider $provider, TypeSource $source, ContextContract $context): string { return $source->getTypeName(); } @@ -401,7 +409,7 @@ public function call( object $builder, Property $property, Argument $argument, - Context $context, + ContextContract $context, ): object { return $builder; } @@ -418,7 +426,7 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + public function getFieldType(TypeProvider $provider, TypeSource $source, ContextContract $context): string { return $source->getTypeName(); } @@ -438,7 +446,7 @@ public function call( object $builder, Property $property, Argument $argument, - Context $context, + ContextContract $context, ): object { return $builder; } @@ -455,7 +463,7 @@ public static function getName(): string { } #[Override] - public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): string { + public function getFieldType(TypeProvider $provider, TypeSource $source, ContextContract $context): string { return $source->getTypeName(); } @@ -475,7 +483,7 @@ public function call( object $builder, Property $property, Argument $argument, - Context $context, + ContextContract $context, ): object { return $builder; } diff --git a/packages/graphql/src/Builder/Traits/WithManipulator.php b/packages/graphql/src/Builder/Traits/WithManipulator.php index f857c6b26..1318eae56 100644 --- a/packages/graphql/src/Builder/Traits/WithManipulator.php +++ b/packages/graphql/src/Builder/Traits/WithManipulator.php @@ -3,22 +3,13 @@ namespace LastDragon_ru\LaraASP\GraphQL\Builder\Traits; use Illuminate\Container\Container; -use LastDragon_ru\LaraASP\GraphQL\Builder\BuilderInfo; use LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator; -use LastDragon_ru\LaraASP\GraphQL\Utils\AstManipulator; use Nuwave\Lighthouse\Schema\AST\DocumentAST; trait WithManipulator { - protected function getAstManipulator(DocumentAST $document): AstManipulator { - return Container::getInstance()->make(AstManipulator::class, [ - 'document' => $document, - ]); - } - - protected function getManipulator(DocumentAST $document, BuilderInfo $builder): Manipulator { + protected function getAstManipulator(DocumentAST $document): Manipulator { return Container::getInstance()->make(Manipulator::class, [ - 'document' => $document, - 'builderInfo' => $builder, + 'document' => $document, ]); } } diff --git a/packages/graphql/src/Builder/Types/InputObject.php b/packages/graphql/src/Builder/Types/InputObject.php index 16b91a4aa..777575e94 100644 --- a/packages/graphql/src/Builder/Types/InputObject.php +++ b/packages/graphql/src/Builder/Types/InputObject.php @@ -9,6 +9,7 @@ use GraphQL\Language\BlockString; use GraphQL\Language\Parser; use GraphQL\Type\Definition\Type; +use LastDragon_ru\LaraASP\GraphQL\Builder\Contexts\AstManipulation; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator; use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scope; @@ -163,10 +164,18 @@ protected function getFieldDefinition( Manipulator $manipulator, InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, Context $context, - ): InputValueDefinitionNode|null { + ): ?InputValueDefinitionNode { + // Builder? + $builder = $context->get(AstManipulation::class)?->builderInfo->getBuilder(); + + if (!$builder) { + return null; + } + + // Operator? [$operator, $type] = $this->getFieldOperator($manipulator, $field, $context) ?? [null, null]; - if ($operator === null || !$operator->isBuilderSupported($manipulator->getBuilderInfo()->getBuilder())) { + if ($operator === null || !$operator->isBuilderSupported($builder)) { return null; } @@ -174,6 +183,7 @@ protected function getFieldDefinition( $type = $manipulator->getTypeSource($field->getTypeDefinition()); } + // Field $fieldName = $manipulator->getName($field->getField()); $fieldDesc = $this->getFieldDescription($manipulator, $field, $context); $fieldDirectives = $this->getFieldDirectives($manipulator, $field, $context); @@ -211,9 +221,15 @@ protected function getFieldDirectiveOperator( InputFieldSource|ObjectFieldSource|InterfaceFieldSource $field, Context $context, ): ?Operator { + // Builder? + $builder = $context->get(AstManipulation::class)?->builderInfo->getBuilder(); + + if (!$builder) { + return null; + } + // Directive? $operator = null; - $builder = $manipulator->getBuilderInfo()->getBuilder(); $nodes = [$field->getField(), $field->getTypeDefinition()]; foreach ($nodes as $node) { diff --git a/packages/graphql/src/SearchBy/Types/Condition.php b/packages/graphql/src/SearchBy/Types/Condition.php index 4e972ec2c..45f2b4c4f 100644 --- a/packages/graphql/src/SearchBy/Types/Condition.php +++ b/packages/graphql/src/SearchBy/Types/Condition.php @@ -37,6 +37,7 @@ use function array_unique; use function array_values; use function is_string; +use function reset; use const SORT_REGULAR; @@ -76,7 +77,7 @@ protected function getOperators( return array_values(array_unique( array_merge( parent::getOperators($manipulator, $source, $context), - $manipulator->getTypeOperators($this->getScope(), Operators::Extra), + $manipulator->getTypeOperators($this->getScope(), Operators::Extra, $context), ), SORT_REGULAR, )); @@ -166,16 +167,8 @@ protected function getObjectDefaultOperator( } // Condition - $builder = $manipulator->getBuilderInfo()->getBuilder(); - $operators = $manipulator->getTypeOperators($this->getScope(), Operators::Condition); - $condition = null; - - foreach ($operators as $operator) { - if ($operator->isBuilderSupported($builder)) { - $condition = $operator; - break; - } - } + $operators = $manipulator->getTypeOperators($this->getScope(), Operators::Condition, $context); + $condition = reset($operators) ?: null; return $condition; } diff --git a/packages/graphql/src/SearchBy/Types/Enumeration.php b/packages/graphql/src/SearchBy/Types/Enumeration.php index ac2983114..3181176a1 100644 --- a/packages/graphql/src/SearchBy/Types/Enumeration.php +++ b/packages/graphql/src/SearchBy/Types/Enumeration.php @@ -42,8 +42,8 @@ public function getTypeDefinition( // Operators $scope = Directive::getScope(); $extras = $source->isNullable() ? [Operators::Null] : []; - $operators = $manipulator->getTypeOperators($scope, $source->getTypeName(), ...$extras) - ?: $manipulator->getTypeOperators($scope, Operators::Enum, ...$extras); + $operators = $manipulator->getTypeOperators($scope, $source->getTypeName(), $context, ...$extras) + ?: $manipulator->getTypeOperators($scope, Operators::Enum, $context, ...$extras); if (!$operators) { return null; diff --git a/packages/graphql/src/SearchBy/Types/Scalar.php b/packages/graphql/src/SearchBy/Types/Scalar.php index 90c6a2cbb..98eb5c5f9 100644 --- a/packages/graphql/src/SearchBy/Types/Scalar.php +++ b/packages/graphql/src/SearchBy/Types/Scalar.php @@ -42,7 +42,7 @@ public function getTypeDefinition( // Operators $scope = Directive::getScope(); $extras = $source->isNullable() ? [Operators::Null] : []; - $operators = $manipulator->getTypeOperators($scope, $source->getTypeName(), ...$extras); + $operators = $manipulator->getTypeOperators($scope, $source->getTypeName(), $context, ...$extras); if (!$operators) { return null; diff --git a/packages/graphql/src/SortBy/Types/Clause.php b/packages/graphql/src/SortBy/Types/Clause.php index 3f28a99d4..5a51cb3e4 100644 --- a/packages/graphql/src/SortBy/Types/Clause.php +++ b/packages/graphql/src/SortBy/Types/Clause.php @@ -72,7 +72,7 @@ protected function getOperators( array_unique( array_merge( parent::getOperators($manipulator, $source, $context), - $manipulator->getTypeOperators($this->getScope(), Operators::Extra), + $manipulator->getTypeOperators($this->getScope(), Operators::Extra, $context), ), SORT_REGULAR, ), diff --git a/packages/graphql/src/Stream/Directives/Directive.php b/packages/graphql/src/Stream/Directives/Directive.php index a29c2aaa8..ed1e7747c 100644 --- a/packages/graphql/src/Stream/Directives/Directive.php +++ b/packages/graphql/src/Stream/Directives/Directive.php @@ -219,6 +219,10 @@ public function manipulateFieldDefinition( throw new FieldIsUnion($source); } + // Builder? + Container::getInstance()->make(BuilderInfoDetector::class) + ->getFieldBuilderInfo($documentAST, $parentType, $fieldDefinition); + // Searchable? $searchable = Cast::toBool( $this->directiveArgValue(self::ArgSearchable) @@ -282,11 +286,8 @@ public function manipulateFieldDefinition( ); // Update type - $detector = Container::getInstance()->make(BuilderInfoDetector::class); - $context = new Context(); - $builder = $detector->getFieldBuilderInfo($documentAST, $parentType, $fieldDefinition); - $type = $this->getManipulator($documentAST, $builder)->getType(StreamType::class, $source, $context); - $type = Parser::typeReference("{$type}!"); + $type = $this->getAstManipulator($documentAST)->getType(StreamType::class, $source, new Context()); + $type = Parser::typeReference("{$type}!"); $manipulator->setFieldType( $parentType, @@ -423,8 +424,6 @@ static function (mixed $argument, AstManipulator $manipulator): bool { return $type; } - - // // diff --git a/packages/graphql/src/Stream/Directives/DirectiveTest.php b/packages/graphql/src/Stream/Directives/DirectiveTest.php index f81edf07d..144edd582 100644 --- a/packages/graphql/src/Stream/Directives/DirectiveTest.php +++ b/packages/graphql/src/Stream/Directives/DirectiveTest.php @@ -347,7 +347,7 @@ public function testManipulateFieldDefinitionFieldIsNotList(): void { public function testManipulateFieldDefinitionArgumentAlreadyDefined(): void { self::expectException(ArgumentAlreadyDefined::class); - self::expectExceptionMessage('Argument `type Test { field(where) }` already defined.'); + self::expectExceptionMessage('Argument `type Query { field(where) }` already defined.'); $directives = Container::getInstance()->make(DirectiveLocator::class); @@ -356,11 +356,11 @@ public function testManipulateFieldDefinitionArgumentAlreadyDefined(): void { $this->useGraphQLSchema( <<<'GRAPHQL' type Query { - field: Test + field(where: Int): [TestObject] @stream } - type Test { - field(where: Int): [Test] @stream + type TestObject { + id: ID! } GRAPHQL, ); diff --git a/packages/graphql/src/Stream/Directives/Offset.php b/packages/graphql/src/Stream/Directives/Offset.php index 42988d267..e8971b5bc 100644 --- a/packages/graphql/src/Stream/Directives/Offset.php +++ b/packages/graphql/src/Stream/Directives/Offset.php @@ -7,9 +7,7 @@ use GraphQL\Language\AST\InterfaceTypeDefinitionNode; use GraphQL\Language\AST\ObjectTypeDefinitionNode; use GraphQL\Language\Parser; -use Illuminate\Container\Container; use LastDragon_ru\LaraASP\Core\Utils\Cast; -use LastDragon_ru\LaraASP\GraphQL\Builder\BuilderInfoDetector; use LastDragon_ru\LaraASP\GraphQL\Builder\Context; use LastDragon_ru\LaraASP\GraphQL\Builder\Traits\WithManipulator; use LastDragon_ru\LaraASP\GraphQL\Builder\Traits\WithSource; @@ -64,9 +62,7 @@ public function manipulateArgDefinition( FieldDefinitionNode &$parentField, ObjectTypeDefinitionNode|InterfaceTypeDefinitionNode &$parentType, ): void { - $detector = Container::getInstance()->make(BuilderInfoDetector::class); - $builder = $detector->getFieldBuilderInfo($documentAST, $parentType, $parentField); - $manipulator = $this->getManipulator($documentAST, $builder); + $manipulator = $this->getAstManipulator($documentAST); $context = new Context(); $source = $this->getFieldArgumentSource($manipulator, $parentType, $parentField, $argDefinition); $type = Parser::typeReference($manipulator->getType(OffsetType::class, $source, $context)); From e184bd74f418c8644830213b9fc97c44543c7d01 Mon Sep 17 00:00:00 2001 From: Aleksei Lebedev <1329824+LastDragon-ru@users.noreply.github.com> Date: Wed, 10 Jan 2024 15:59:09 +0400 Subject: [PATCH 8/8] UPGRADE docs. --- packages/graphql/UPGRADE.md | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/graphql/UPGRADE.md b/packages/graphql/UPGRADE.md index d95164f28..66d0e933d 100644 --- a/packages/graphql/UPGRADE.md +++ b/packages/graphql/UPGRADE.md @@ -49,8 +49,30 @@ Please also see [changelog](https://github.com/LastDragon-ru/lara-asp/releases) * [ ] `enum SortByTypeDirection { asc, desc }` => `enum SortByTypeDirection { Asc, Desc }`. 🤝 -* [ ] `LastDragon_ru\LaraASP\GraphQL\SortBy\Builders\*` => `LastDragon_ru\LaraASP\GraphQL\SortBy\Sorters\*`. +* [ ] If you are testing generated queries, you need to update `sort_by_*` alias to `lara_asp_graphql__sort_by__*`. -* [ ] Update `LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition` implementations. +## API -* [ ] If you are testing generated queries, you need to update `sort_by_*` alias to `lara_asp_graphql__sort_by__*`. +This section is actual only if you are extending the package. Please review and update (listed the most significant changes only): + +* [ ] `LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Handler` + +* [ ] `LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Operator` + +* [ ] `LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeDefinition`. + +* [ ] `LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\TypeProvider` + +* [ ] `LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator` (removed `BuilderInfo`) + +* [ ] `LastDragon_ru\LaraASP\GraphQL\Builder\Directives\HandlerDirective` + +* [ ] `LastDragon_ru\LaraASP\GraphQL\Builder\Directives\PropertyDirective` + +* [ ] `LastDragon_ru\LaraASP\GraphQL\SortBy\Builders\*` => `LastDragon_ru\LaraASP\GraphQL\SortBy\Sorters\*` + +* [ ] To get `BuilderInfo` instance within Operator the `LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Context` should be used instead of `LastDragon_ru\LaraASP\GraphQL\Builder\Manipulator`: + + ```php + $context->get(\LastDragon_ru\LaraASP\GraphQL\Builder\Contexts\AstManipulation\AstManipulation::class)?->builderInfo + ```