From 597885028a53916d390931c38d55d1a2cde32bf8 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Wed, 12 Oct 2022 20:55:04 +1300 Subject: [PATCH] Use request setters --- composer.json | 4 +- composer.lock | 52 +++++++++++++++-------- src/Appwrite/GraphQL/Resolvers.php | 66 ++++++++++++++---------------- 3 files changed, 66 insertions(+), 56 deletions(-) diff --git a/composer.json b/composer.json index 8413341c29..4f3fc98280 100644 --- a/composer.json +++ b/composer.json @@ -43,7 +43,7 @@ "ext-sockets": "*", "appwrite/php-clamav": "1.1.*", "appwrite/php-runtimes": "0.11.*", - "utopia-php/framework": "0.21.*", + "utopia-php/framework": "dev-feat-allow-mutations as 0.22.1", "utopia-php/logger": "0.3.*", "utopia-php/abuse": "0.13.*", "utopia-php/analytics": "0.2.*", @@ -56,7 +56,7 @@ "utopia-php/registry": "0.6.*", "utopia-php/preloader": "0.2.*", "utopia-php/domains": "1.1.*", - "utopia-php/swoole": "0.3.*", + "utopia-php/swoole": "dev-feat-allow-mutations as 0.3.0", "utopia-php/storage": "0.11.*", "utopia-php/websocket": "0.1.0", "utopia-php/image": "0.5.*", diff --git a/composer.lock b/composer.lock index b78f70232d..8fa65e0b0f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "69eba53723d6196f86161494e8cc7546", + "content-hash": "066292e3062dbbc4c8d633ff11f70c65", "packages": [ { "name": "adhocore/jwt", @@ -2178,24 +2178,24 @@ }, { "name": "utopia-php/framework", - "version": "0.21.1", + "version": "dev-feat-allow-mutations", "source": { "type": "git", "url": "https://github.com/utopia-php/framework.git", - "reference": "c81789b87a917da2daf336738170ebe01f50ea18" + "reference": "bf561c125647dcee8d6b3a5b3934c7ece91f326e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/framework/zipball/c81789b87a917da2daf336738170ebe01f50ea18", - "reference": "c81789b87a917da2daf336738170ebe01f50ea18", + "url": "https://api.github.com/repos/utopia-php/framework/zipball/bf561c125647dcee8d6b3a5b3934c7ece91f326e", + "reference": "bf561c125647dcee8d6b3a5b3934c7ece91f326e", "shasum": "" }, "require": { "php": ">=8.0.0" }, "require-dev": { - "phpunit/phpunit": "^9.5.10", - "vimeo/psalm": "4.13.1" + "phpunit/phpunit": "^9.5.25", + "vimeo/psalm": "^4.27.0" }, "type": "library", "autoload": { @@ -2221,9 +2221,9 @@ ], "support": { "issues": "https://github.com/utopia-php/framework/issues", - "source": "https://github.com/utopia-php/framework/tree/0.21.1" + "source": "https://github.com/utopia-php/framework/tree/feat-allow-mutations" }, - "time": "2022-09-07T09:56:28+00:00" + "time": "2022-10-12T02:02:55+00:00" }, { "name": "utopia-php/image", @@ -2611,22 +2611,22 @@ }, { "name": "utopia-php/swoole", - "version": "0.3.3", + "version": "dev-feat-allow-mutations", "source": { "type": "git", "url": "https://github.com/utopia-php/swoole.git", - "reference": "8312df69233b5dcd3992de88f131f238002749de" + "reference": "2c9e77696a4e40003a767c7d65cd5b2573f8b745" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/swoole/zipball/8312df69233b5dcd3992de88f131f238002749de", - "reference": "8312df69233b5dcd3992de88f131f238002749de", + "url": "https://api.github.com/repos/utopia-php/swoole/zipball/2c9e77696a4e40003a767c7d65cd5b2573f8b745", + "reference": "2c9e77696a4e40003a767c7d65cd5b2573f8b745", "shasum": "" }, "require": { "ext-swoole": "*", "php": ">=8.0", - "utopia-php/framework": "0.*.*" + "utopia-php/framework": "dev-feat-allow-mutations" }, "require-dev": { "phpunit/phpunit": "^9.3", @@ -2661,9 +2661,9 @@ ], "support": { "issues": "https://github.com/utopia-php/swoole/issues", - "source": "https://github.com/utopia-php/swoole/tree/0.3.3" + "source": "https://github.com/utopia-php/swoole/tree/feat-allow-mutations" }, - "time": "2022-01-20T09:58:43+00:00" + "time": "2022-10-12T03:11:03+00:00" }, { "name": "utopia-php/system", @@ -5424,9 +5424,25 @@ "time": "2022-09-28T08:42:51+00:00" } ], - "aliases": [], + "aliases": [ + { + "package": "utopia-php/framework", + "version": "dev-feat-allow-mutations", + "alias": "0.22.1", + "alias_normalized": "0.22.1.0" + }, + { + "package": "utopia-php/swoole", + "version": "dev-feat-allow-mutations", + "alias": "0.3.0", + "alias_normalized": "0.3.0.0" + } + ], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "utopia-php/framework": 20, + "utopia-php/swoole": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { diff --git a/src/Appwrite/GraphQL/Resolvers.php b/src/Appwrite/GraphQL/Resolvers.php index 29de91cb83..9b4d7c6a3e 100644 --- a/src/Appwrite/GraphQL/Resolvers.php +++ b/src/Appwrite/GraphQL/Resolvers.php @@ -2,6 +2,7 @@ namespace Appwrite\GraphQL; +use Appwrite\GraphQL\Exception as GQLException; use Appwrite\Promises\Swoole; use Appwrite\Utopia\Request; use Appwrite\Utopia\Response; @@ -26,10 +27,13 @@ class Resolvers ): callable { return static fn($type, $args, $context, $info) => new Swoole( function (callable $resolve, callable $reject) use ($utopia, $route, $args, $context, $info) { + /** @var App $utopia */ + /** @var Response $response */ + /** @var Request $request */ + $utopia = $utopia->getResource('utopia:graphql', true); $request = $utopia->getResource('request', true); $response = $utopia->getResource('response', true); - $swoole = $request->getSwoole(); $path = $route->getPath(); foreach ($args as $key => $value) { @@ -38,16 +42,15 @@ class Resolvers } } - $swoole->server['request_method'] = $route->getMethod(); - $swoole->server['request_uri'] = $path; - $swoole->server['path_info'] = $path; + $request->setMethod($route->getMethod()); + $request->setURI($path); switch ($route->getMethod()) { case 'GET': - $swoole->get = $args; + $request->setGet($args); break; default: - $swoole->post = $args; + $request->setPost($args); break; } @@ -101,11 +104,9 @@ class Resolvers $utopia = $utopia->getResource('utopia:graphql', true); $request = $utopia->getResource('request', true); $response = $utopia->getResource('response', true); - $swoole = $request->getSwoole(); - $swoole->server['request_method'] = 'GET'; - $swoole->server['request_uri'] = "/v1/databases/$databaseId/collections/$collectionId/documents/{$args['id']}"; - $swoole->server['path_info'] = "/v1/databases/$databaseId/collections/$collectionId/documents/{$args['id']}"; + $request->setMethod('GET'); + $request->setURI("/database/collections/{$collectionId}/documents/{$args['documentId']}"); self::resolve($utopia, $request, $response, $resolve, $reject); } @@ -132,15 +133,12 @@ class Resolvers $utopia = $utopia->getResource('utopia:graphql', true); $request = $utopia->getResource('request', true); $response = $utopia->getResource('response', true); - $swoole = $request->getSwoole(); - $swoole->post = [ - 'databaseId' => $databaseId, - 'collectionId' => $collectionId, + + $request->setMethod('GET'); + $request->setURI("/database/collections/{$collectionId}/documents"); + $request->setGet([ 'queries' => $args['queries'], - ]; - $swoole->server['request_method'] = 'GET'; - $swoole->server['request_uri'] = "/v1/databases/$databaseId/collections/$collectionId/documents"; - $swoole->server['path_info'] = "/v1/databases/$databaseId/collections/$collectionId/documents"; + ]); $beforeResolve = function ($payload) { return $payload['documents']; @@ -171,7 +169,6 @@ class Resolvers $utopia = $utopia->getResource('utopia:graphql', true); $request = $utopia->getResource('request', true); $response = $utopia->getResource('response', true); - $swoole = $request->getSwoole(); $id = $args['id'] ?? ID::unique(); $permissions = $args['permissions'] ?? null; @@ -179,17 +176,17 @@ class Resolvers unset($args['id']); unset($args['permissions']); + $request->setMethod('POST'); + $request->setURI("/v1/databases/$databaseId/collections/$collectionId/documents"); + // Order must be the same as the route params - $swoole->post = [ + $request->setPost([ 'databaseId' => $databaseId, 'documentId' => $id, 'collectionId' => $collectionId, 'data' => $args, 'permissions' => $permissions, - ]; - $swoole->server['request_method'] = 'POST'; - $swoole->server['request_uri'] = "/v1/databases/$databaseId/collections/$collectionId/documents"; - $swoole->server['path_info'] = "/v1/databases/$databaseId/collections/$collectionId/documents"; + ]); self::resolve($utopia, $request, $response, $resolve, $reject); } @@ -216,7 +213,6 @@ class Resolvers $utopia = $utopia->getResource('utopia:graphql', true); $request = $utopia->getResource('request', true); $response = $utopia->getResource('response', true); - $swoole = $request->getSwoole(); $documentId = $args['id']; $permissions = $args['permissions'] ?? null; @@ -224,17 +220,17 @@ class Resolvers unset($args['id']); unset($args['permissions']); + $request->setMethod('PATCH'); + $request->setURI("/v1/databases/$databaseId/collections/$collectionId/documents/$documentId"); + // Order must be the same as the route params - $swoole->post = [ + $request->setPost([ 'databaseId' => $databaseId, 'collectionId' => $collectionId, 'documentId' => $documentId, 'data' => $args, 'permissions' => $permissions, - ]; - $swoole->server['request_method'] = 'PATCH'; - $swoole->server['request_uri'] = "/v1/databases/$databaseId/collections/$collectionId/documents/$documentId"; - $swoole->server['path_info'] = "/v1/databases/$databaseId/collections/$collectionId/documents/$documentId"; + ]); self::resolve($utopia, $request, $response, $resolve, $reject); } @@ -261,13 +257,11 @@ class Resolvers $utopia = $utopia->getResource('utopia:graphql', true); $request = $utopia->getResource('request', true); $response = $utopia->getResource('response', true); - $swoole = $request->getSwoole(); $documentId = $args['id']; - $swoole->server['request_method'] = 'DELETE'; - $swoole->server['request_uri'] = "/v1/databases/$databaseId/collections/$collectionId/documents/$documentId"; - $swoole->server['path_info'] = "/v1/databases/$databaseId/collections/$collectionId/documents/$documentId"; + $request->setMethod('DELETE'); + $request->setURI("/v1/databases/$databaseId/collections/$collectionId/documents/$documentId"); self::resolve($utopia, $request, $response, $resolve, $reject); } @@ -296,10 +290,10 @@ class Resolvers ): void { // Drop json content type so post args are used directly if ($request->getHeader('content-type') === 'application/json') { - unset($request->getSwoole()->header['content-type']); + $request->removeHeader('content-type'); } - $request = new Request($request->getSwoole()); + $request = $request->clone(); $utopia->setResource('request', static fn() => $request); $response->setContentType(Response::CONTENT_TYPE_NULL);