From 624c91816b8fd6b247d73049153ac3ac3e4a1039 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Fri, 20 Dec 2024 12:06:09 +0900 Subject: [PATCH] Begin work on SDKResponse refactor --- app/config/specs/open-api3-latest-client.json | 8 +++-- .../specs/open-api3-latest-console.json | 8 +++-- app/config/specs/open-api3-latest-server.json | 8 +++-- app/config/specs/swagger2-latest-client.json | 8 +++-- app/config/specs/swagger2-latest-console.json | 8 +++-- app/config/specs/swagger2-latest-server.json | 8 +++-- app/controllers/api/health.php | 25 ++++++++++---- src/Appwrite/SDK/Method.php | 6 ++-- src/Appwrite/SDK/Multiplex.php | 28 ++++++++++------ src/Appwrite/SDK/Response.php | 33 +++++++++++++++++++ .../Specification/Format/OpenAPI3.php | 12 ++++++- .../Specification/Format/Swagger2.php | 12 ++++++- 12 files changed, 131 insertions(+), 33 deletions(-) create mode 100644 src/Appwrite/SDK/Response.php diff --git a/app/config/specs/open-api3-latest-client.json b/app/config/specs/open-api3-latest-client.json index ff4a9751f6..cffba28434 100644 --- a/app/config/specs/open-api3-latest-client.json +++ b/app/config/specs/open-api3-latest-client.json @@ -4576,7 +4576,9 @@ "documentId", "data" ], - "responseModel": "document" + "responses": [ + "#\/components\/schemas\/document" + ] }, { "name": "createDocuments", @@ -4586,7 +4588,9 @@ "required": [ "documents" ], - "responseModel": "documentList" + "responses": [ + "#\/components\/schemas\/documentList" + ] } ], "auth": { diff --git a/app/config/specs/open-api3-latest-console.json b/app/config/specs/open-api3-latest-console.json index 2b84f19b25..a9afe4b0e1 100644 --- a/app/config/specs/open-api3-latest-console.json +++ b/app/config/specs/open-api3-latest-console.json @@ -8145,7 +8145,9 @@ "documentId", "data" ], - "responseModel": "document" + "responses": [ + "#\/components\/schemas\/document" + ] }, { "name": "createDocuments", @@ -8155,7 +8157,9 @@ "required": [ "documents" ], - "responseModel": "documentList" + "responses": [ + "#\/components\/schemas\/documentList" + ] } ], "auth": { diff --git a/app/config/specs/open-api3-latest-server.json b/app/config/specs/open-api3-latest-server.json index e40dc58cd5..4960002943 100644 --- a/app/config/specs/open-api3-latest-server.json +++ b/app/config/specs/open-api3-latest-server.json @@ -7679,7 +7679,9 @@ "documentId", "data" ], - "responseModel": "document" + "responses": [ + "#\/components\/schemas\/document" + ] }, { "name": "createDocuments", @@ -7689,7 +7691,9 @@ "required": [ "documents" ], - "responseModel": "documentList" + "responses": [ + "#\/components\/schemas\/documentList" + ] } ], "auth": { diff --git a/app/config/specs/swagger2-latest-client.json b/app/config/specs/swagger2-latest-client.json index d8e02126fe..2bb9cd265c 100644 --- a/app/config/specs/swagger2-latest-client.json +++ b/app/config/specs/swagger2-latest-client.json @@ -4764,7 +4764,9 @@ "documentId", "data" ], - "responseModel": "document" + "responses": [ + "#\/definitions\/document" + ] }, { "name": "createDocuments", @@ -4774,7 +4776,9 @@ "required": [ "documents" ], - "responseModel": "documentList" + "responses": [ + "#\/definitions\/documentList" + ] } ], "auth": { diff --git a/app/config/specs/swagger2-latest-console.json b/app/config/specs/swagger2-latest-console.json index cadb43ec28..bde121a094 100644 --- a/app/config/specs/swagger2-latest-console.json +++ b/app/config/specs/swagger2-latest-console.json @@ -8348,7 +8348,9 @@ "documentId", "data" ], - "responseModel": "document" + "responses": [ + "#\/definitions\/document" + ] }, { "name": "createDocuments", @@ -8358,7 +8360,9 @@ "required": [ "documents" ], - "responseModel": "documentList" + "responses": [ + "#\/definitions\/documentList" + ] } ], "auth": { diff --git a/app/config/specs/swagger2-latest-server.json b/app/config/specs/swagger2-latest-server.json index 6b4b7a3e5a..f51bba17cd 100644 --- a/app/config/specs/swagger2-latest-server.json +++ b/app/config/specs/swagger2-latest-server.json @@ -7860,7 +7860,9 @@ "documentId", "data" ], - "responseModel": "document" + "responses": [ + "#\/definitions\/document" + ] }, { "name": "createDocuments", @@ -7870,7 +7872,9 @@ "required": [ "documents" ], - "responseModel": "documentList" + "responses": [ + "#\/definitions\/documentList" + ] } ], "auth": { diff --git a/app/controllers/api/health.php b/app/controllers/api/health.php index aba80a18bc..46f16d0273 100644 --- a/app/controllers/api/health.php +++ b/app/controllers/api/health.php @@ -5,6 +5,7 @@ use Appwrite\Event\Event; use Appwrite\Extend\Exception; use Appwrite\SDK\AuthType; use Appwrite\SDK\Method; +use Appwrite\SDK\Response as SDKResponse; use Appwrite\SDK\ResponseType; use Appwrite\Utopia\Response; use Utopia\App; @@ -34,8 +35,12 @@ App::get('/v1/health') name: 'get', auth: [AuthType::KEY], description: '/docs/references/health/get.md', - responseCode: Response::STATUS_CODE_OK, - responseModel: Response::MODEL_HEALTH_STATUS, + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_HEALTH_STATUS, + ) + ], responseType: ResponseType::JSON )) ->inject('response') @@ -68,8 +73,12 @@ App::get('/v1/health/db') namespace: 'health', name: 'getDB', description: '/docs/references/health/get-db.md', - responseCode: Response::STATUS_CODE_OK, - responseModel: Response::MODEL_HEALTH_STATUS, + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_HEALTH_STATUS, + ) + ], responseType: ResponseType::JSON )) ->inject('response') @@ -124,8 +133,12 @@ App::get('/v1/health/cache') namespace: 'health', name: 'getCache', description: '/docs/references/health/get-cache.md', - responseCode: Response::STATUS_CODE_OK, - responseModel: Response::MODEL_HEALTH_STATUS, + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_HEALTH_STATUS, + ) + ], responseType: ResponseType::JSON )) ->inject('response') diff --git a/src/Appwrite/SDK/Method.php b/src/Appwrite/SDK/Method.php index 79cf01cefb..ce4c55c9d8 100644 --- a/src/Appwrite/SDK/Method.php +++ b/src/Appwrite/SDK/Method.php @@ -49,8 +49,9 @@ class Method * @param string $name * @param string $description * @param array $auth + * @param array $responses * @param int $responseCode - * @param string|array $responseModel + * @param string|array $responseModel * @param ResponseType $responseType * @param MethodType|null $methodType * @param string|null $offlineKey @@ -69,8 +70,7 @@ class Method protected string $name, protected string $description, protected array $auth, - protected int $responseCode, - protected string|array $responseModel, + protected array $responses, protected ResponseType $responseType = ResponseType::JSON, protected ?MethodType $methodType = null, protected ?string $offlineKey = null, diff --git a/src/Appwrite/SDK/Multiplex.php b/src/Appwrite/SDK/Multiplex.php index 946838f086..4129169528 100644 --- a/src/Appwrite/SDK/Multiplex.php +++ b/src/Appwrite/SDK/Multiplex.php @@ -2,9 +2,7 @@ namespace Appwrite\SDK; -use JsonSerializable; - -class Multiplex implements JsonSerializable +class Multiplex { /** * @param string $name @@ -20,13 +18,23 @@ class Multiplex implements JsonSerializable ) { } - public function jsonSerialize(): array + public function getName(): string { - return [ - 'name' => $this->name, - 'parameters' => $this->parameters, - 'required' => $this->required, - 'responseModel' => $this->responseModel, - ]; + return $this->name; + } + + public function getParameters(): array + { + return $this->parameters; + } + + public function getRequired(): array + { + return $this->required; + } + + public function getResponseModel(): string + { + return $this->responseModel; } } diff --git a/src/Appwrite/SDK/Response.php b/src/Appwrite/SDK/Response.php new file mode 100644 index 0000000000..7b521549cb --- /dev/null +++ b/src/Appwrite/SDK/Response.php @@ -0,0 +1,33 @@ +code; + } + + public function getModel(): string + { + return $this->model; + } + + public function getDescription(): string + { + return $this->description; + } +} \ No newline at end of file diff --git a/src/Appwrite/Specification/Format/OpenAPI3.php b/src/Appwrite/Specification/Format/OpenAPI3.php index d4e53783a7..842c473e78 100644 --- a/src/Appwrite/Specification/Format/OpenAPI3.php +++ b/src/Appwrite/Specification/Format/OpenAPI3.php @@ -197,7 +197,17 @@ class OpenAPI3 extends Format ]; if (!empty($sdk->getMultiplex())) { - $temp['x-appwrite']['multiplex'] = $sdk->getMultiplex(); + $temp['x-appwrite']['multiplex'] = []; + foreach ($sdk->getMultiplex() as $multiplex) { + /** @var \Appwrite\SDK\Multiplex $multiplex */ + + $temp['x-appwrite']['multiplex'][] = [ + 'name' => $multiplex->getName(), + 'parameters' => $multiplex->getParameters(), + 'required' => $multiplex->getRequired(), + 'responses' => ['#/components/schemas/' . $multiplex->getResponseModel()] + ]; + } } foreach ($this->models as $value) { diff --git a/src/Appwrite/Specification/Format/Swagger2.php b/src/Appwrite/Specification/Format/Swagger2.php index 5d6bc3a61a..952064faaf 100644 --- a/src/Appwrite/Specification/Format/Swagger2.php +++ b/src/Appwrite/Specification/Format/Swagger2.php @@ -199,7 +199,17 @@ class Swagger2 extends Format } if (!empty($sdk->getMultiplex())) { - $temp['x-appwrite']['multiplex'] = $sdk->getMultiplex(); + $temp['x-appwrite']['multiplex'] = []; + foreach ($sdk->getMultiplex() as $multiplex) { + /** @var \Appwrite\SDK\Multiplex $multiplex */ + + $temp['x-appwrite']['multiplex'][] = [ + 'name' => $multiplex->getName(), + 'parameters' => $multiplex->getParameters(), + 'required' => $multiplex->getRequired(), + 'responses' => ["#/definitions/" . $multiplex->getResponseModel()] + ]; + } } foreach ($this->models as $value) {