Restructure type related helpers
This commit is contained in:
parent
ee2e8fcc23
commit
4bc44183b6
6 changed files with 39 additions and 47 deletions
|
@ -4,6 +4,7 @@ namespace Appwrite\GraphQL;
|
|||
|
||||
use Appwrite\GraphQL\Types\InputFile;
|
||||
use Appwrite\GraphQL\Types\Json;
|
||||
use Appwrite\GraphQL\Types\Registry;
|
||||
use GraphQL\Type\Definition\Type;
|
||||
|
||||
class Types
|
||||
|
@ -15,11 +16,11 @@ class Types
|
|||
*/
|
||||
public static function json(): Type
|
||||
{
|
||||
if (TypeRegistry::has(Json::class)) {
|
||||
return TypeRegistry::get(Json::class);
|
||||
if (Registry::has(Json::class)) {
|
||||
return Registry::get(Json::class);
|
||||
}
|
||||
$type = new Json();
|
||||
TypeRegistry::set(Json::class, $type);
|
||||
Registry::set(Json::class, $type);
|
||||
return $type;
|
||||
}
|
||||
|
||||
|
@ -30,11 +31,11 @@ class Types
|
|||
*/
|
||||
public static function inputFile(): Type
|
||||
{
|
||||
if (TypeRegistry::has(InputFile::class)) {
|
||||
return TypeRegistry::get(InputFile::class);
|
||||
if (Registry::has(InputFile::class)) {
|
||||
return Registry::get(InputFile::class);
|
||||
}
|
||||
$type = new InputFile();
|
||||
TypeRegistry::set(InputFile::class, $type);
|
||||
Registry::set(InputFile::class, $type);
|
||||
return $type;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,15 +3,13 @@
|
|||
namespace Appwrite\GraphQL\Types;
|
||||
|
||||
use GraphQL\Error\Error;
|
||||
use GraphQL\Error\InvariantViolation;
|
||||
use GraphQL\Language\AST\Node;
|
||||
use GraphQL\Type\Definition\ScalarType;
|
||||
|
||||
class InputFile extends ScalarType
|
||||
{
|
||||
public $name = 'InputFile';
|
||||
public $description
|
||||
= 'The `InputFile` special type represents a file to be uploaded in the same HTTP request as specified by
|
||||
public $description = 'The `InputFile` special type represents a file to be uploaded in the same HTTP request as specified by
|
||||
[graphql-multipart-request-spec](https://github.com/jaydenseric/graphql-multipart-request-spec).';
|
||||
|
||||
public function serialize($value)
|
||||
|
|
|
@ -15,8 +15,7 @@ use GraphQL\Type\Definition\ScalarType;
|
|||
class Json extends ScalarType
|
||||
{
|
||||
public $name = 'Json';
|
||||
public $description =
|
||||
'The `JSON` scalar type represents JSON values as specified by
|
||||
public $description = 'The `JSON` scalar type represents JSON values as specified by
|
||||
[ECMA-404](https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).';
|
||||
|
||||
public function serialize($value)
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace Appwrite\GraphQL;
|
||||
namespace Appwrite\GraphQL\Types;
|
||||
|
||||
use Appwrite\Auth\Validator\Password;
|
||||
use Appwrite\Event\Validator\Event;
|
||||
use Appwrite\GraphQL\Resolvers;
|
||||
use Appwrite\GraphQL\Types;
|
||||
use Appwrite\Network\Validator\CNAME;
|
||||
use Appwrite\Network\Validator\Domain;
|
||||
use Appwrite\Network\Validator\Email;
|
||||
|
@ -58,7 +60,7 @@ use Utopia\Validator\Range;
|
|||
use Utopia\Validator\Text;
|
||||
use Utopia\Validator\WhiteList;
|
||||
|
||||
class TypeMapper
|
||||
class Mapper
|
||||
{
|
||||
private static array $models = [];
|
||||
private static array $defaultArgs = [];
|
||||
|
@ -99,7 +101,7 @@ class TypeMapper
|
|||
];
|
||||
|
||||
foreach ($defaultTypes as $type => $default) {
|
||||
TypeRegistry::set($type, $default);
|
||||
Registry::set($type, $default);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -117,22 +119,22 @@ class TypeMapper
|
|||
return [];
|
||||
}
|
||||
|
||||
public static function fromRoute(App $utopia, Route $route): iterable
|
||||
public static function route(App $utopia, Route $route): iterable
|
||||
{
|
||||
if (\str_starts_with($route->getPath(), '/v1/mock/')) {
|
||||
return;
|
||||
}
|
||||
if ($route->getLabel('sdk.methodType', '') === 'webAuth') {
|
||||
if (
|
||||
\str_starts_with($route->getPath(), '/v1/mock/') ||
|
||||
\str_starts_with($route->getPath(), '/v1/graphql')
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
$modelNames = $route->getLabel('sdk.response.model', 'none');
|
||||
$models = \is_array($modelNames)
|
||||
? \array_map(static fn($m) => static::$models[$m], $modelNames)
|
||||
: [static::$models[$modelNames]];
|
||||
$names = $route->getLabel('sdk.response.model', 'none');
|
||||
$models = \is_array($names)
|
||||
? \array_map(static fn($m) => static::$models[$m], $names)
|
||||
: [static::$models[$names]];
|
||||
|
||||
foreach ($models as $model) {
|
||||
$type = TypeMapper::fromResponseModel(\ucfirst($model->getType()));
|
||||
$type = Mapper::fromResponseModel(\ucfirst($model->getType()));
|
||||
$description = $route->getDesc();
|
||||
$params = [];
|
||||
$list = false;
|
||||
|
@ -141,7 +143,7 @@ class TypeMapper
|
|||
if ($name === 'queries') {
|
||||
$list = true;
|
||||
}
|
||||
$parameterType = TypeMapper::fromRouteParameter(
|
||||
$parameterType = Mapper::fromRouteParameter(
|
||||
$utopia,
|
||||
$parameter['validator'],
|
||||
!$parameter['optional'],
|
||||
|
@ -160,7 +162,7 @@ class TypeMapper
|
|||
'type' => $type,
|
||||
'description' => $description,
|
||||
'args' => $params,
|
||||
'resolve' => Resolvers::resolveAPIRequest($utopia, $route)
|
||||
'resolve' => Resolvers::api($utopia, $route)
|
||||
];
|
||||
|
||||
if ($list) {
|
||||
|
@ -185,8 +187,8 @@ class TypeMapper
|
|||
*/
|
||||
public static function fromResponseModel(string $name): Type
|
||||
{
|
||||
if (TypeRegistry::has($name)) {
|
||||
return TypeRegistry::get($name);
|
||||
if (Registry::has($name)) {
|
||||
return Registry::get($name);
|
||||
}
|
||||
|
||||
$fields = [];
|
||||
|
@ -237,7 +239,7 @@ class TypeMapper
|
|||
'fields' => $fields,
|
||||
]);
|
||||
|
||||
TypeRegistry::set($name, $type);
|
||||
Registry::set($name, $type);
|
||||
|
||||
return $type;
|
||||
}
|
||||
|
@ -371,8 +373,8 @@ class TypeMapper
|
|||
{
|
||||
$type = $rule['type'];
|
||||
|
||||
if (TypeRegistry::has($type)) {
|
||||
return TypeRegistry::get($type);
|
||||
if (Registry::has($type)) {
|
||||
return Registry::get($type);
|
||||
}
|
||||
|
||||
$complexModel = self::$models[$type];
|
||||
|
@ -383,8 +385,8 @@ class TypeMapper
|
|||
{
|
||||
$unionName = \ucfirst($name);
|
||||
|
||||
if (TypeRegistry::has($unionName)) {
|
||||
return TypeRegistry::get($unionName);
|
||||
if (Registry::has($unionName)) {
|
||||
return Registry::get($unionName);
|
||||
}
|
||||
|
||||
$types = [];
|
||||
|
@ -400,7 +402,7 @@ class TypeMapper
|
|||
},
|
||||
]);
|
||||
|
||||
TypeRegistry::set($unionName, $unionType);
|
||||
Registry::set($unionName, $unionType);
|
||||
|
||||
return $unionType;
|
||||
}
|
|
@ -1,18 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace Appwrite\GraphQL;
|
||||
namespace Appwrite\GraphQL\Types;
|
||||
|
||||
use Appwrite\GraphQL\Types\InputFile;
|
||||
use Appwrite\GraphQL\Types\Json;
|
||||
use Appwrite\Utopia\Response;
|
||||
use Appwrite\Utopia\Response\Model;
|
||||
use GraphQL\Type\Definition\ObjectType;
|
||||
use GraphQL\Type\Definition\Type;
|
||||
use GraphQL\Type\Definition\UnionType;
|
||||
use Utopia\CLI\Console;
|
||||
use Utopia\Database\Database;
|
||||
|
||||
class TypeRegistry
|
||||
class Registry
|
||||
{
|
||||
private static array $register = [];
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace Tests\Unit\GraphQL;
|
||||
|
||||
use Appwrite\GraphQL\TypeMapper;
|
||||
use Appwrite\GraphQL\Types\Mapper;
|
||||
use Appwrite\Utopia\Response;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Swoole\Http\Response as SwooleResponse;
|
||||
|
@ -14,7 +14,7 @@ class BuilderTest extends TestCase
|
|||
public function setUp(): void
|
||||
{
|
||||
$this->response = new Response(new SwooleResponse());
|
||||
TypeMapper::init($this->response->getModels());
|
||||
Mapper::init($this->response->getModels());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -23,7 +23,7 @@ class BuilderTest extends TestCase
|
|||
public function testCreateTypeMapping()
|
||||
{
|
||||
$model = $this->response->getModel(Response::MODEL_COLLECTION);
|
||||
$type = TypeMapper::fromResponseModel(\ucfirst($model->getType()));
|
||||
$type = Mapper::fromResponseModel(\ucfirst($model->getType()));
|
||||
$this->assertEquals('Collection', $type->name);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue