1
0
Fork 0
mirror of synced 2024-10-01 17:58:02 +13:00

Restructure type related helpers

This commit is contained in:
Jake Barnby 2022-10-12 13:57:37 +13:00
parent ee2e8fcc23
commit 4bc44183b6
No known key found for this signature in database
GPG key ID: C437A8CC85B96E9C
6 changed files with 39 additions and 47 deletions

View file

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

View file

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

View file

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

View file

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

View file

@ -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 = [];

View file

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