mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Fix operation spec gen
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,7 @@ use Appwrite\SDK\MethodType;
|
||||
use Appwrite\SDK\Response;
|
||||
use Appwrite\SDK\Specification\Format;
|
||||
use Appwrite\Template\Template;
|
||||
use Appwrite\Utopia\Database\Validator\Operation;
|
||||
use Appwrite\Utopia\Response\Model;
|
||||
use Utopia\Database\Database;
|
||||
use Utopia\Database\Helpers\Permission;
|
||||
@@ -396,7 +397,37 @@ class OpenAPI3 extends Format
|
||||
$validator = $validator->getValidator();
|
||||
}
|
||||
|
||||
switch ((!empty($validator)) ? \get_class($validator) : '') {
|
||||
$class = !empty($validator)
|
||||
? \get_class($validator)
|
||||
: '';
|
||||
|
||||
$base = !empty($class)
|
||||
? \get_parent_class($class)
|
||||
: '';
|
||||
|
||||
switch ($base) {
|
||||
case 'Appwrite\Utopia\Database\Validator\Queries\Base':
|
||||
$class = $base;
|
||||
break;
|
||||
}
|
||||
|
||||
if ($class === 'Utopia\Validator\AnyOf') {
|
||||
$validator = $param['validator']->getValidators()[0];
|
||||
$class = \get_class($validator);
|
||||
}
|
||||
|
||||
$array = false;
|
||||
if ($class === 'Utopia\Validator\ArrayList') {
|
||||
$array = true;
|
||||
$subclass = \get_class($validator->getValidator());
|
||||
switch ($subclass) {
|
||||
case 'Appwrite\Utopia\Database\Validator\Operation':
|
||||
$class = $subclass;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch ($class) {
|
||||
case 'Utopia\Database\Validator\UID':
|
||||
case 'Utopia\Validator\Text':
|
||||
$node['schema']['type'] = $validator->getType();
|
||||
@@ -418,6 +449,20 @@ class OpenAPI3 extends Format
|
||||
$node['schema']['format'] = 'datetime';
|
||||
$node['schema']['x-example'] = Model::TYPE_DATETIME_EXAMPLE;
|
||||
break;
|
||||
case 'Utopia\Database\Validator\Spatial':
|
||||
/** @var Spatial $validator */
|
||||
$node['schema']['type'] = 'array';
|
||||
$node['schema']['items'] = [
|
||||
'oneOf' => [
|
||||
['type' => 'array']
|
||||
]
|
||||
];
|
||||
$node['schema']['x-example'] = match ($validator->getSpatialType()) {
|
||||
Database::VAR_POINT => '[1, 2]',
|
||||
Database::VAR_LINESTRING => '[[1, 2], [3, 4], [5, 6]]',
|
||||
Database::VAR_POLYGON => '[[[1, 2], [3, 4], [5, 6], [1, 2]]]',
|
||||
};
|
||||
break;
|
||||
case 'Appwrite\Network\Validator\Email':
|
||||
$node['schema']['type'] = $validator->getType();
|
||||
$node['schema']['format'] = 'email';
|
||||
@@ -449,20 +494,7 @@ class OpenAPI3 extends Format
|
||||
'type' => $validator->getValidator()->getType(),
|
||||
];
|
||||
break;
|
||||
case 'Utopia\Database\Validator\Spatial':
|
||||
/** @var Spatial $validator */
|
||||
$node['schema']['type'] = 'array';
|
||||
$node['schema']['items'] = [
|
||||
'oneOf' => [
|
||||
['type' => 'array']
|
||||
]
|
||||
];
|
||||
$node['schema']['x-example'] = match ($validator->getSpatialType()) {
|
||||
Database::VAR_POINT => '[1, 2]',
|
||||
Database::VAR_LINESTRING => '[[1, 2], [3, 4], [5, 6]]',
|
||||
Database::VAR_POLYGON => '[[[1, 2], [3, 4], [5, 6], [1, 2]]]',
|
||||
};
|
||||
break;
|
||||
case 'Appwrite\Utopia\Database\Validator\Queries\Base':
|
||||
case 'Appwrite\Utopia\Database\Validator\Queries\Columns':
|
||||
case 'Appwrite\Utopia\Database\Validator\Queries\Attributes':
|
||||
case 'Appwrite\Utopia\Database\Validator\Queries\Buckets':
|
||||
@@ -556,8 +588,7 @@ class OpenAPI3 extends Format
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($allowed) {
|
||||
if ($allowed && $validator->getType() === 'string') {
|
||||
$node['schema']['enum'] = $validator->getList();
|
||||
$node['schema']['x-enum-name'] = $this->getEnumName($sdk->getNamespace() ?? '', $methodName, $name);
|
||||
$node['schema']['x-enum-keys'] = $this->getEnumKeys($sdk->getNamespace() ?? '', $methodName, $name);
|
||||
@@ -568,7 +599,35 @@ class OpenAPI3 extends Format
|
||||
break;
|
||||
case 'Appwrite\Utopia\Database\Validator\CompoundUID':
|
||||
$node['schema']['type'] = $validator->getType();
|
||||
$node['schema']['x-example'] = '[ID1:ID2]';
|
||||
$node['schema']['x-example'] = '<ID1:ID2>';
|
||||
break;
|
||||
case 'Appwrite\Utopia\Database\Validator\Operation':
|
||||
if ($array) {
|
||||
$validator = $validator->getValidator();
|
||||
}
|
||||
|
||||
/** @var Operation $validator */
|
||||
$collectionIdKey = $validator->getCollectionIdKey();
|
||||
$documentIdKey = $validator->getDocumentIdKey();
|
||||
if ($array) {
|
||||
$node['schema']['type'] = 'array';
|
||||
$node['schema']['items'] = ['type' => 'object'];
|
||||
} else {
|
||||
$node['schema']['type'] = 'object';
|
||||
}
|
||||
$example = [
|
||||
'action' => 'create',
|
||||
'databaseId' => '<DATABASE_ID>',
|
||||
$collectionIdKey => '<'.\strtoupper(Template::fromCamelCaseToSnake($collectionIdKey)).'>',
|
||||
$documentIdKey => '<'.\strtoupper(Template::fromCamelCaseToSnake($documentIdKey)).'>',
|
||||
'data' => [
|
||||
'name' => 'Walter O\'Brien',
|
||||
],
|
||||
];
|
||||
if ($array) {
|
||||
$example = [$example];
|
||||
}
|
||||
$node['schema']['x-example'] = \str_replace("\n", "\n\t", \json_encode($example, JSON_PRETTY_PRINT));
|
||||
break;
|
||||
default:
|
||||
$node['schema']['type'] = 'string';
|
||||
|
||||
@@ -8,6 +8,7 @@ use Appwrite\SDK\MethodType;
|
||||
use Appwrite\SDK\Response;
|
||||
use Appwrite\SDK\Specification\Format;
|
||||
use Appwrite\Template\Template;
|
||||
use Appwrite\Utopia\Database\Validator\Operation;
|
||||
use Appwrite\Utopia\Response\Model;
|
||||
use Utopia\Database\Database;
|
||||
use Utopia\Database\Helpers\Permission;
|
||||
@@ -422,6 +423,17 @@ class Swagger2 extends Format
|
||||
$class = \get_class($validator);
|
||||
}
|
||||
|
||||
$array = false;
|
||||
if ($class === 'Utopia\Validator\ArrayList') {
|
||||
$array = true;
|
||||
$subclass = \get_class($validator->getValidator());
|
||||
switch ($subclass) {
|
||||
case 'Appwrite\Utopia\Database\Validator\Operation':
|
||||
$class = $subclass;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch ($class) {
|
||||
case 'Utopia\Validator\Text':
|
||||
case 'Utopia\Database\Validator\UID':
|
||||
@@ -444,6 +456,20 @@ class Swagger2 extends Format
|
||||
$node['format'] = 'datetime';
|
||||
$node['x-example'] = Model::TYPE_DATETIME_EXAMPLE;
|
||||
break;
|
||||
case 'Utopia\Database\Validator\Spatial':
|
||||
/** @var Spatial $validator */
|
||||
$node['type'] = 'array';
|
||||
$node['schema']['items'] = [
|
||||
'oneOf' => [
|
||||
['type' => 'array']
|
||||
]
|
||||
];
|
||||
$node['x-example'] = match ($validator->getSpatialType()) {
|
||||
Database::VAR_POINT => '[1, 2]',
|
||||
Database::VAR_LINESTRING => '[[1, 2], [3, 4], [5, 6]]',
|
||||
Database::VAR_POLYGON => '[[[1, 2], [3, 4], [5, 6], [1, 2]]]',
|
||||
};
|
||||
break;
|
||||
case 'Appwrite\Network\Validator\Email':
|
||||
$node['type'] = $validator->getType();
|
||||
$node['format'] = 'email';
|
||||
@@ -464,20 +490,6 @@ class Swagger2 extends Format
|
||||
'type' => $validator->getValidator()->getType(),
|
||||
];
|
||||
break;
|
||||
case 'Utopia\Database\Validator\Spatial':
|
||||
/** @var Spatial $validator */
|
||||
$node['type'] = 'array';
|
||||
$node['schema']['items'] = [
|
||||
'oneOf' => [
|
||||
['type' => 'array']
|
||||
]
|
||||
];
|
||||
$node['x-example'] = match ($validator->getSpatialType()) {
|
||||
Database::VAR_POINT => '[1, 2]',
|
||||
Database::VAR_LINESTRING => '[[1, 2], [3, 4], [5, 6]]',
|
||||
Database::VAR_POLYGON => '[[[1, 2], [3, 4], [5, 6], [1, 2]]]',
|
||||
};
|
||||
break;
|
||||
case 'Utopia\Validator\JSON':
|
||||
case 'Utopia\Validator\Mock':
|
||||
case 'Utopia\Validator\Assoc':
|
||||
@@ -562,20 +574,47 @@ class Swagger2 extends Format
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($allowed && $validator->getType() === 'string') {
|
||||
$node['enum'] = $validator->getList();
|
||||
$node['x-enum-name'] = $this->getEnumName($namespace, $methodName, $name);
|
||||
$node['x-enum-keys'] = $this->getEnumKeys($namespace, $methodName, $name);
|
||||
}
|
||||
|
||||
if ($validator->getType() === 'integer') {
|
||||
$node['format'] = 'int32';
|
||||
}
|
||||
break;
|
||||
case 'Appwrite\Utopia\Database\Validator\CompoundUID':
|
||||
$node['type'] = $validator->getType();
|
||||
$node['x-example'] = '[ID1:ID2]';
|
||||
$node['x-example'] = '<ID1:ID2>';
|
||||
break;
|
||||
case 'Appwrite\Utopia\Database\Validator\Operation':
|
||||
if ($array) {
|
||||
$validator = $validator->getValidator();
|
||||
}
|
||||
|
||||
/** @var Operation $validator */
|
||||
$collectionIdKey = $validator->getCollectionIdKey();
|
||||
$documentIdKey = $validator->getDocumentIdKey();
|
||||
if ($array) {
|
||||
$node['type'] = 'array';
|
||||
$node['collectionFormat'] = 'multi';
|
||||
$node['items'] = ['type' => 'object'];
|
||||
} else {
|
||||
$node['type'] = 'object';
|
||||
}
|
||||
$example = [
|
||||
'action' => 'create',
|
||||
'databaseId' => '<DATABASE_ID>',
|
||||
$collectionIdKey => '<'.\strtoupper(Template::fromCamelCaseToSnake($collectionIdKey)).'>',
|
||||
$documentIdKey => '<'.\strtoupper(Template::fromCamelCaseToSnake($documentIdKey)).'>',
|
||||
'data' => [
|
||||
'name' => 'Walter O\'Brien',
|
||||
],
|
||||
];
|
||||
if ($array) {
|
||||
$example = [$example];
|
||||
}
|
||||
$node['x-example'] = \str_replace("\n", "\n\t", \json_encode($example, JSON_PRETTY_PRINT));
|
||||
break;
|
||||
default:
|
||||
$node['type'] = 'string';
|
||||
|
||||
@@ -64,12 +64,12 @@ class Operation extends Validator
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
public function getCollectionIdName(): string
|
||||
public function getCollectionIdKey(): string
|
||||
{
|
||||
return $this->collectionIdName;
|
||||
}
|
||||
|
||||
public function getDocumentIdName(): string
|
||||
public function getDocumentIdKey(): string
|
||||
{
|
||||
return $this->documentIdName;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user