From 2f1e25fc098a6f34e5a333e986f44e97c0501620 Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Tue, 23 Jun 2020 18:01:20 +0300 Subject: [PATCH] Updated naming conventions --- app/app.php | 9 ++- app/controllers/api/account.php | 15 ++--- app/controllers/api/locale.php | 4 +- app/controllers/api/users.php | 2 +- src/Appwrite/Utopia/Response.php | 66 +++++++++---------- .../Utopia/Response/{Result.php => Model.php} | 4 +- src/Appwrite/Utopia/Response/Model/Error.php | 50 ++++++++++++++ .../Utopia/Response/Model/ErrorDev.php | 43 ++++++++++++ src/Appwrite/Utopia/Response/Model/File.php | 34 ++++++++++ src/Appwrite/Utopia/Response/Model/Health.php | 33 ++++++++++ .../Response/{Result => Model}/Locale.php | 13 ++-- src/Appwrite/Utopia/Response/Model/Log.php | 33 ++++++++++ .../Utopia/Response/Model/Session.php | 33 ++++++++++ src/Appwrite/Utopia/Response/Model/Token.php | 33 ++++++++++ .../Response/{Result => Model}/User.php | 12 ++-- src/Appwrite/Utopia/Response/Result/File.php | 40 ----------- .../Utopia/Response/Result/Health.php | 40 ----------- src/Appwrite/Utopia/Response/Result/Log.php | 37 ----------- .../Utopia/Response/Result/Session.php | 37 ----------- src/Appwrite/Utopia/Response/Result/Token.php | 37 ----------- 20 files changed, 321 insertions(+), 254 deletions(-) rename src/Appwrite/Utopia/Response/{Result.php => Model.php} (90%) create mode 100644 src/Appwrite/Utopia/Response/Model/Error.php create mode 100644 src/Appwrite/Utopia/Response/Model/ErrorDev.php create mode 100644 src/Appwrite/Utopia/Response/Model/File.php create mode 100644 src/Appwrite/Utopia/Response/Model/Health.php rename src/Appwrite/Utopia/Response/{Result => Model}/Locale.php (89%) create mode 100644 src/Appwrite/Utopia/Response/Model/Log.php create mode 100644 src/Appwrite/Utopia/Response/Model/Session.php create mode 100644 src/Appwrite/Utopia/Response/Model/Token.php rename src/Appwrite/Utopia/Response/{Result => Model}/User.php (90%) delete mode 100644 src/Appwrite/Utopia/Response/Result/File.php delete mode 100644 src/Appwrite/Utopia/Response/Result/Health.php delete mode 100644 src/Appwrite/Utopia/Response/Result/Log.php delete mode 100644 src/Appwrite/Utopia/Response/Result/Session.php delete mode 100644 src/Appwrite/Utopia/Response/Result/Token.php diff --git a/app/app.php b/app/app.php index 64a4967568..f6d81fcb6f 100644 --- a/app/app.php +++ b/app/app.php @@ -17,6 +17,7 @@ use Appwrite\Database\Document; use Appwrite\Database\Validator\Authorization; use Appwrite\Event\Event; use Appwrite\Network\Validator\Origin; +use Appwrite\Utopia\Response; /* * Configuration files @@ -270,7 +271,6 @@ $utopia->options(function () use ($request, $response) { }); $utopia->error(function ($error /* @var $error Exception */) use ($request, $response, $utopia, $project) { - $env = Config::getParam('env'); $version = Config::getParam('version'); switch ($error->getCode()) { @@ -292,7 +292,7 @@ $utopia->error(function ($error /* @var $error Exception */) use ($request, $res $_SERVER = []; // Reset before reporting to error log to avoid keys being compromised - $output = ((App::MODE_TYPE_DEVELOPMENT == $env)) ? [ + $output = ($utopia->isDevelopment()) ? [ 'message' => $error->getMessage(), 'code' => $error->getCode(), 'file' => $error->getFile(), @@ -337,9 +337,8 @@ $utopia->error(function ($error /* @var $error Exception */) use ($request, $res $response->send($layout->render()); } - $response - ->json($output) - ; + $response->dynamic(new Document($output), + $utopia->isDevelopment() ? Response::MODEL_ERROR_DEV : Response::MODEL_LOCALE); }); $utopia->get('/manifest.json') diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 1c9279936d..5c84b6a0fc 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -4,7 +4,6 @@ global $utopia, $register, $request, $response, $user, $audit, $webhook, $mail, $project, $projectDB, $clients; use Utopia\Exception; -use Utopia\Response; use Utopia\Config\Config; use Utopia\Validator\Assoc; use Utopia\Validator\Text; @@ -25,7 +24,7 @@ use Appwrite\Database\Validator\Authorization; use Appwrite\Template\Template; use Appwrite\OpenSSL\OpenSSL; use Appwrite\URL\URL as URLParser; -use Appwrite\Utopia\Response as UtopiaResponse; +use Appwrite\Utopia\Response; use DeviceDetector\DeviceDetector; use GeoIp2\Database\Reader; use Utopia\Validator\ArrayList; @@ -134,8 +133,8 @@ $utopia->post('/v1/account') ->setParam('resource', 'users/'.$user->getId()) ; - $response->setStatusCode(UtopiaResponse::STATUS_CODE_CREATED); - $response->dynamic($user->setAttribute('roles', Authorization::getRoles())); + $response->setStatusCode(Response::STATUS_CODE_CREATED); + $response->dynamic($user->setAttribute('roles', Authorization::getRoles()), Response::MODEL_USER); } ); @@ -529,7 +528,7 @@ $utopia->get('/v1/account') ->label('sdk.response', ['200' => 'user']) ->action( function () use ($response, &$user, $oauth2Keys) { - $response->dynamic($user->setAttribute('roles', Authorization::getRoles())); + $response->dynamic($user->setAttribute('roles', Authorization::getRoles()), Response::MODEL_USER); } ); @@ -710,7 +709,7 @@ $utopia->patch('/v1/account/name') ->setParam('resource', 'users/'.$user->getId()) ; - $response->dynamic($user->setAttribute('roles', Authorization::getRoles())); + $response->dynamic($user->setAttribute('roles', Authorization::getRoles()), Response::MODEL_USER); } ); @@ -744,7 +743,7 @@ $utopia->patch('/v1/account/password') ->setParam('resource', 'users/'.$user->getId()) ; - $response->dynamic($user->setAttribute('roles', Authorization::getRoles())); + $response->dynamic($user->setAttribute('roles', Authorization::getRoles()), Response::MODEL_USER); } ); @@ -794,7 +793,7 @@ $utopia->patch('/v1/account/email') ->setParam('resource', 'users/'.$user->getId()) ; - $response->dynamic($user->setAttribute('roles', Authorization::getRoles()));$response->dynamic($user); + $response->dynamic($user->setAttribute('roles', Authorization::getRoles()), Response::MODEL_USER); } ); diff --git a/app/controllers/api/locale.php b/app/controllers/api/locale.php index 4064eb8bc1..c778d9fd4c 100644 --- a/app/controllers/api/locale.php +++ b/app/controllers/api/locale.php @@ -3,6 +3,7 @@ global $utopia, $register, $request, $response, $projectDB, $project, $user, $audit; use Appwrite\Database\Document; +use Appwrite\Utopia\Response; use Utopia\App; use Utopia\Locale\Locale; use GeoIp2\Database\Reader; @@ -31,7 +32,6 @@ $utopia->get('/v1/locale') $ip = '79.177.241.94'; } - $output['$collection'] = 'locale'; $output['ip'] = $ip; $currency = null; @@ -66,7 +66,7 @@ $utopia->get('/v1/locale') ->addHeader('Expires', \date('D, d M Y H:i:s', \time() + $time).' GMT') // 45 days cache ; - $response->dynamic(new Document($output)); + $response->dynamic(new Document($output), Response::MODEL_LOCALE); } ); diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index 03409bd3c7..c607f6b68c 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -80,7 +80,7 @@ $utopia->post('/v1/users') } $response->setStatusCode(Response::STATUS_CODE_CREATED); - $response->dynamic($user); + $response->dynamic($user, Response::MODEL_USER); } ); diff --git a/src/Appwrite/Utopia/Response.php b/src/Appwrite/Utopia/Response.php index 6d52e8f52d..e49fafcda3 100644 --- a/src/Appwrite/Utopia/Response.php +++ b/src/Appwrite/Utopia/Response.php @@ -4,19 +4,27 @@ namespace Appwrite\Utopia; use Exception; use Appwrite\Database\Document; -use Appwrite\Utopia\Response\Result; -use Appwrite\Utopia\Response\Result\User; -use Appwrite\Utopia\Response\Result\Locale; +use Appwrite\Utopia\Response\Model; +use Appwrite\Utopia\Response\Model\Error; +use Appwrite\Utopia\Response\Model\ErrorDev; +use Appwrite\Utopia\Response\Model\User; +use Appwrite\Utopia\Response\Model\Locale; use Utopia\Response as UtopiaResponse; class Response extends UtopiaResponse { + const MODEL_ERROR = 'error'; + const MODEL_ERROR_DEV = 'errorDev'; + const MODEL_USER = 'user'; + const MODEL_LOCALE = 'locale'; public function __construct() { $this - ->setResult(new User()) - ->setResult(new Locale()) + ->setModel(new Error()) + ->setModel(new ErrorDev()) + ->setModel(new User()) + ->setModel(new Locale()) ; } @@ -28,71 +36,63 @@ class Response extends UtopiaResponse /** * List of defined output objects */ - protected $results = []; + protected $models = []; /** - * Set Result Object + * Set Model Object * * @return self */ - public function setResult(Result $result): self + public function setModel(Model $instance): self { - $this->results[$result->getCollection()] = $result; + $this->models[$instance->getType()] = $instance; return $this; } /** - * Get Result Object + * Get Model Object * - * @return Result + * @return Model */ - public function getResult(string $key): Result + public function getModel(string $key): Model { - if(!isset($this->results[$key])) { - throw new Exception('Undefined result: '.$key); + if(!isset($this->models[$key])) { + throw new Exception('Undefined model: '.$key); } - return $this->results[$key]; + return $this->models[$key]; } /** * Validate response objects and outputs * the response according to given format type */ - public function dynamic(Document $document, $type = self::CONTENT_TYPE_JSON) + public function dynamic(Document $document, string $model) { - $collection = $document->getCollection(); $data = $document->getArrayCopy(); - $result = $this->getResult($collection); + $model = $this->getModel($model); $output = []; - foreach($result->getRules() as $key => $rule) { + foreach($model->getRules() as $key => $rule) { if(!isset($data[$key])) { if(!is_null($rule['default'])) { $data[$key] = $rule['default']; } else { - throw new Exception('Missing response key: ' . $key); + throw new Exception('Missing response key: '.$key); } } + if($rule['array'] && !is_array($data[$key])) { + throw new Exception($key.' must be an array of '.$rule['type'].' types'); + } + $output[$key] = $data[$key]; } - switch ($type) { - case self::CONTENT_TYPE_JSON: - return $this->json($output); - break; - - case self::CONTENT_TYPE_YAML: - return $this->yaml($output); - break; - - default: - throw new Exception('Unknown content type'); - break; - } + return $this->json($output); + //return $this->yaml($output); } /** diff --git a/src/Appwrite/Utopia/Response/Result.php b/src/Appwrite/Utopia/Response/Model.php similarity index 90% rename from src/Appwrite/Utopia/Response/Result.php rename to src/Appwrite/Utopia/Response/Model.php index facad4dc99..b50224935b 100644 --- a/src/Appwrite/Utopia/Response/Result.php +++ b/src/Appwrite/Utopia/Response/Model.php @@ -2,7 +2,7 @@ namespace Appwrite\Utopia\Response; -abstract class Result +abstract class Model { protected $rules = []; @@ -18,7 +18,7 @@ abstract class Result * * @return string */ - abstract public function getCollection():string; + abstract public function getType():string; /** * Get Rules diff --git a/src/Appwrite/Utopia/Response/Model/Error.php b/src/Appwrite/Utopia/Response/Model/Error.php new file mode 100644 index 0000000000..95a4764d4a --- /dev/null +++ b/src/Appwrite/Utopia/Response/Model/Error.php @@ -0,0 +1,50 @@ +addRule('message', [ + 'type' => 'string', + 'description' => 'Error message.', + 'example' => 'Not found', + ]) + ->addRule('code', [ + 'type' => 'string', + 'description' => 'Error code.', + 'example' => '404', + ]) + ->addRule('version', [ + 'type' => 'string', + 'description' => 'Server version number.', + 'example' => APP_VERSION_STABLE, + ]) + ; + } + + /** + * Get Name + * + * @return string + */ + public function getName():string + { + return 'Error'; + } + + /** + * Get Collection + * + * @return string + */ + public function getType():string + { + return Response::MODEL_ERROR; + } +} \ No newline at end of file diff --git a/src/Appwrite/Utopia/Response/Model/ErrorDev.php b/src/Appwrite/Utopia/Response/Model/ErrorDev.php new file mode 100644 index 0000000000..7069f2b11b --- /dev/null +++ b/src/Appwrite/Utopia/Response/Model/ErrorDev.php @@ -0,0 +1,43 @@ +addRule('file', [ + 'type' => 'string', + 'description' => 'File path.', + 'example' => '/usr/share/nginx/html/vendor/utopia-php/framework/src/App.php', + ]) + ->addRule('line', [ + 'type' => 'integer', + 'description' => 'Line number.', + 'example' => 209, + ]) + // ->addRule('trace', [ + // 'type' => 'string', + // 'description' => 'Error trace.', + // 'example' => [ + // '' + // ], + // ]) + ; + } + + /** + * Get Collection + * + * @return string + */ + public function getType():string + { + return Response::MODEL_ERROR_DEV; + } +} \ No newline at end of file diff --git a/src/Appwrite/Utopia/Response/Model/File.php b/src/Appwrite/Utopia/Response/Model/File.php new file mode 100644 index 0000000000..875c6f4bd7 --- /dev/null +++ b/src/Appwrite/Utopia/Response/Model/File.php @@ -0,0 +1,34 @@ +addRule('$id', 'string', 'User ID.', '5e5ea5c16897e') - ->addRule('name', 'string', 'User name.', 'John Doe') - ->addRule('email', 'string', 'User email address.', 'john@appwrite.io') - ->addRule('emailVerification', 'string', 'Email verification status.', true) - ->addRule('registration', 'integer', 'User registration date in UNIX format.', 1583261121) - ; - } - - /** - * Get Name - * - * @return string - */ - public function getName():string - { - return 'User'; - } - - /** - * Get Collection - * - * @return string - */ - public function getCollection():string - { - return Database::SYSTEM_COLLECTION_TOKENS; - } -} \ No newline at end of file diff --git a/src/Appwrite/Utopia/Response/Result/Health.php b/src/Appwrite/Utopia/Response/Result/Health.php deleted file mode 100644 index 9d3c7cd64d..0000000000 --- a/src/Appwrite/Utopia/Response/Result/Health.php +++ /dev/null @@ -1,40 +0,0 @@ -addRule('$id', 'string', 'User ID.', '5e5ea5c16897e') - ->addRule('name', 'string', 'User name.', 'John Doe') - ->addRule('email', 'string', 'User email address.', 'john@appwrite.io') - ->addRule('emailVerification', 'string', 'Email verification status.', true) - ->addRule('registration', 'integer', 'User registration date in UNIX format.', 1583261121) - ; - } - - /** - * Get Name - * - * @return string - */ - public function getName():string - { - return 'User'; - } - - /** - * Get Collection - * - * @return string - */ - public function getCollection():string - { - return Database::SYSTEM_COLLECTION_TOKENS; - } -} \ No newline at end of file diff --git a/src/Appwrite/Utopia/Response/Result/Log.php b/src/Appwrite/Utopia/Response/Result/Log.php deleted file mode 100644 index 784eefa662..0000000000 --- a/src/Appwrite/Utopia/Response/Result/Log.php +++ /dev/null @@ -1,37 +0,0 @@ -addRule('$id', 'string', 'Session ID.', '5e5ea5c16897e') - ->addRule('expire', 'integer', 'Session expiration date in UNIX format.', 1583261121) - ; - } - - /** - * Get Name - * - * @return string - */ - public function getName():string - { - return 'Session'; - } - - /** - * Get Collection - * - * @return string - */ - public function getCollection():string - { - return Database::SYSTEM_COLLECTION_TOKENS; - } -} \ No newline at end of file diff --git a/src/Appwrite/Utopia/Response/Result/Session.php b/src/Appwrite/Utopia/Response/Result/Session.php deleted file mode 100644 index 93270bb05a..0000000000 --- a/src/Appwrite/Utopia/Response/Result/Session.php +++ /dev/null @@ -1,37 +0,0 @@ -addRule('$id', 'string', 'Session ID.', '5e5ea5c16897e') - ->addRule('expire', 'integer', 'Session expiration date in UNIX format.', 1583261121) - ; - } - - /** - * Get Name - * - * @return string - */ - public function getName():string - { - return 'Session'; - } - - /** - * Get Collection - * - * @return string - */ - public function getCollection():string - { - return Database::SYSTEM_COLLECTION_TOKENS; - } -} \ No newline at end of file diff --git a/src/Appwrite/Utopia/Response/Result/Token.php b/src/Appwrite/Utopia/Response/Result/Token.php deleted file mode 100644 index 29eb15473a..0000000000 --- a/src/Appwrite/Utopia/Response/Result/Token.php +++ /dev/null @@ -1,37 +0,0 @@ -addRule('$id', 'string', 'Token ID.', '5e5ea5c16897e') - ->addRule('expire', 'integer', 'Token expiration date in UNIX format.', 1583261121) - ; - } - - /** - * Get Name - * - * @return string - */ - public function getName():string - { - return 'User'; - } - - /** - * Get Collection - * - * @return string - */ - public function getCollection():string - { - return Database::SYSTEM_COLLECTION_TOKENS; - } -} \ No newline at end of file