Skip to content

Commit

Permalink
refactor(graphql)!: `LastDragon_ru\LaraASP\GraphQL\SortBy\Builders\Sc…
Browse files Browse the repository at this point in the history
…out\ColumnResolver` renamed to `LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver`.
  • Loading branch information
LastDragon-ru committed Nov 5, 2022
1 parent 4703d54 commit e4b733a
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 36 deletions.
2 changes: 1 addition & 1 deletion packages/graphql/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ query {
// AppProvider

$this->app->bind(
LastDragon_ru\LaraASP\GraphQL\SortBy\Builders\Scout\ColumnResolver::class,
LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver::class,
MyScoutColumnResolver::class,
);
```
Expand Down
13 changes: 13 additions & 0 deletions packages/graphql/src/Builder/Contracts/Scout/FieldResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php declare(strict_types = 1);

namespace LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout;

use Illuminate\Database\Eloquent\Model;
use LastDragon_ru\LaraASP\GraphQL\Builder\Property;

/**
* Convert nested property into Scout field.
*/
interface FieldResolver {
public function getField(Model $model, Property $property): string;
}
22 changes: 22 additions & 0 deletions packages/graphql/src/Builder/Scout/DefaultFieldResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php declare(strict_types = 1);

namespace LastDragon_ru\LaraASP\GraphQL\Builder\Scout;

use Illuminate\Database\Eloquent\Model;
use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver;
use LastDragon_ru\LaraASP\GraphQL\Builder\Property;

use function implode;

/**
* @internal
*/
class DefaultFieldResolver implements FieldResolver {
public function __construct() {
// empty
}

public function getField(Model $model, Property $property): string {
return implode('.', $property->getPath());
}
}
11 changes: 7 additions & 4 deletions packages/graphql/src/Provider.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@
use Illuminate\Support\ServiceProvider;
use LastDragon_ru\LaraASP\Core\Concerns\ProviderWithConfig;
use LastDragon_ru\LaraASP\Core\Concerns\ProviderWithTranslations;
use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver as ScoutFieldResolver;
use LastDragon_ru\LaraASP\GraphQL\Builder\Scout\DefaultFieldResolver as ScoutDefaultFieldResolver;
use LastDragon_ru\LaraASP\GraphQL\SchemaPrinter\Contracts\SchemaPrinter as SchemaPrinterContract;
use LastDragon_ru\LaraASP\GraphQL\SchemaPrinter\Contracts\Settings as SettingsContract;
use LastDragon_ru\LaraASP\GraphQL\SchemaPrinter\SchemaPrinter;
use LastDragon_ru\LaraASP\GraphQL\SchemaPrinter\Settings\DefaultSettings;
use LastDragon_ru\LaraASP\GraphQL\SearchBy\Definitions\SearchByDirective;
use LastDragon_ru\LaraASP\GraphQL\SearchBy\Operators;
use LastDragon_ru\LaraASP\GraphQL\SearchBy\Operators as SearchByOperators;
use LastDragon_ru\LaraASP\GraphQL\SortBy\Definitions\SortByDirective;
use LastDragon_ru\LaraASP\GraphQL\Utils\Enum\EnumType;
use Nuwave\Lighthouse\Events\RegisterDirectiveNamespaces;
Expand All @@ -37,8 +39,8 @@ public function register(): void {
parent::register();

$this->registerEnums();
$this->registerBuilders();
$this->registerSchemaPrinter();
$this->registerSearchByDirective();
}

protected function bootDirectives(Dispatcher $dispatcher): void {
Expand All @@ -56,8 +58,9 @@ static function (): string {
);
}

protected function registerSearchByDirective(): void {
$this->app->singleton(Operators::class);
protected function registerBuilders(): void {
$this->app->singleton(ScoutFieldResolver::class, ScoutDefaultFieldResolver::class);
$this->app->singleton(SearchByOperators::class);
}

protected function registerEnums(): void {
Expand Down
14 changes: 5 additions & 9 deletions packages/graphql/src/SortBy/Builders/Scout/Builder.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,25 @@
namespace LastDragon_ru\LaraASP\GraphQL\SortBy\Builders\Scout;

use Laravel\Scout\Builder as ScoutBuilder;
use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver;
use LastDragon_ru\LaraASP\GraphQL\Builder\Property;

use function implode;

class Builder {
public function __construct(
protected ?ColumnResolver $columnResolver = null,
protected FieldResolver $fieldResolver,
) {
// empty
}

public function handle(ScoutBuilder $builder, Property $property, string $direction): ScoutBuilder {
// Column
$path = $property->getPath();
$column = $this->columnResolver
? $this->columnResolver->getColumn($builder->model, $path)
: implode('.', $path);
$field = $this->fieldResolver->getField($builder->model, $property);

// Order
if ($direction) {
$builder = $builder->orderBy($column, $direction);
$builder = $builder->orderBy($field, $direction);
} else {
$builder = $builder->orderBy($column);
$builder = $builder->orderBy($field);
}

return $builder;
Expand Down
15 changes: 8 additions & 7 deletions packages/graphql/src/SortBy/Builders/Scout/BuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Exception;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Builder as ScoutBuilder;
use LastDragon_ru\LaraASP\GraphQL\Builder\Contracts\Scout\FieldResolver;
use LastDragon_ru\LaraASP\GraphQL\Builder\Property;
use LastDragon_ru\LaraASP\GraphQL\Testing\Package\TestCase;

Expand All @@ -26,8 +27,8 @@ class BuilderTest extends TestCase {
*
* @dataProvider dataProviderHandle
*
* @param array<mixed>|Exception $expected
* @param Closure():ColumnResolver $resolver
* @param array<mixed>|Exception $expected
* @param Closure():FieldResolver $resolver
*/
public function testHandle(
array|Exception $expected,
Expand All @@ -40,7 +41,7 @@ public function testHandle(
}

if ($resolver) {
$this->override(ColumnResolver::class, $resolver);
$this->override(FieldResolver::class, $resolver);
}

$builder = $this->app->make(ScoutBuilder::class, [
Expand Down Expand Up @@ -99,13 +100,13 @@ public function dataProviderHandle(): array {
],
new Property('a', 'b'),
'asc',
static function (): ColumnResolver {
return new class() implements ColumnResolver {
static function (): FieldResolver {
return new class() implements FieldResolver {
/**
* @inheritDoc
*/
public function getColumn(Model $model, array $path): string {
return 'properties/'.implode('/', $path);
public function getField(Model $model, Property $property): string {
return 'properties/'.implode('/', $property->getPath());
}
};
},
Expand Down
15 changes: 0 additions & 15 deletions packages/graphql/src/SortBy/Builders/Scout/ColumnResolver.php

This file was deleted.

0 comments on commit e4b733a

Please sign in to comment.