From 40f70faa897ea505701db80c25f4166cdb237c14 Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Thu, 18 May 2023 18:55:22 +0530 Subject: [PATCH] Feat: Add enable param in Database and Collection --- app/config/collections.php | 11 +++++++++++ app/controllers/api/databases.php | 15 ++++++++++----- docker-compose.yml | 1 + src/Appwrite/Utopia/Response/Model/Database.php | 6 ++++++ .../Databases/DatabasesCustomServerTest.php | 3 ++- 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/app/config/collections.php b/app/config/collections.php index 0b4dda6851..85a279faa5 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -32,6 +32,17 @@ $collections = [ 'array' => false, 'filters' => [], ], + [ + '$id' => ID::custom('enabled'), + 'type' => Database::VAR_BOOLEAN, + 'signed' => true, + 'size' => 0, + 'format' => '', + 'filters' => [], + 'required' => false, + 'default' => true, + 'array' => false, + ], [ '$id' => ID::custom('search'), 'type' => Database::VAR_STRING, diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index 8a18e28dba..71a444778c 100644 --- a/app/controllers/api/databases.php +++ b/app/controllers/api/databases.php @@ -384,11 +384,12 @@ App::post('/v1/databases') ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) ->label('sdk.response.model', Response::MODEL_DATABASE) // Model for database needs to be created ->param('databaseId', '', new CustomId(), 'Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.') - ->param('name', '', new Text(128), 'Collection name. Max length: 128 chars.') + ->param('name', '', new Text(128), 'Database name. Max length: 128 chars.') + ->param('enabled', true, new Boolean(), 'Is Database enabled?', true) ->inject('response') ->inject('dbForProject') ->inject('events') - ->action(function (string $databaseId, string $name, Response $response, Database $dbForProject, Event $events) { + ->action(function (string $databaseId, string $name, bool $enabled, Response $response, Database $dbForProject, Event $events) { $databaseId = $databaseId == 'unique()' ? ID::unique() : $databaseId; @@ -396,6 +397,7 @@ App::post('/v1/databases') $dbForProject->createDocument('databases', new Document([ '$id' => $databaseId, 'name' => $name, + 'enabled' => $enabled, 'search' => implode(' ', [$databaseId, $name]), ])); $database = $dbForProject->getDocument('databases', $databaseId); @@ -619,10 +621,11 @@ App::put('/v1/databases/:databaseId') ->label('sdk.response.model', Response::MODEL_DATABASE) ->param('databaseId', '', new UID(), 'Database ID.') ->param('name', null, new Text(128), 'Database name. Max length: 128 chars.') + ->param('enabled', true, new Boolean(), 'Is Database enabled?', true) ->inject('response') ->inject('dbForProject') ->inject('events') - ->action(function (string $databaseId, string $name, Response $response, Database $dbForProject, Event $events) { + ->action(function (string $databaseId, string $name, bool $enabled, Response $response, Database $dbForProject, Event $events) { $database = $dbForProject->getDocument('databases', $databaseId); @@ -633,6 +636,7 @@ App::put('/v1/databases/:databaseId') try { $database = $dbForProject->updateDocument('databases', $databaseId, $database ->setAttribute('name', $name) + ->setAttribute('enabled', $enabled) ->setAttribute('search', implode(' ', [$databaseId, $name]))); } catch (AuthorizationException $exception) { throw new Exception(Exception::USER_UNAUTHORIZED); @@ -714,10 +718,11 @@ App::post('/v1/databases/:databaseId/collections') ->param('name', '', new Text(128), 'Collection name. Max length: 128 chars.') ->param('permissions', null, new Permissions(APP_LIMIT_ARRAY_PARAMS_SIZE), 'An array of permissions strings. By default, no user is granted with any permissions. [Learn more about permissions](/docs/permissions).', true) ->param('documentSecurity', false, new Boolean(true), 'Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](/docs/permissions).', true) + ->param('enabled', true, new Boolean(), 'Is collection enabled?', true) ->inject('response') ->inject('dbForProject') ->inject('events') - ->action(function (string $databaseId, string $collectionId, string $name, ?array $permissions, bool $documentSecurity, Response $response, Database $dbForProject, Event $events) { + ->action(function (string $databaseId, string $collectionId, string $name, ?array $permissions, bool $documentSecurity, bool $enabled, Response $response, Database $dbForProject, Event $events) { $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); @@ -737,7 +742,7 @@ App::post('/v1/databases/:databaseId/collections') 'databaseId' => $databaseId, '$permissions' => $permissions ?? [], 'documentSecurity' => $documentSecurity, - 'enabled' => true, + 'enabled' => $enabled, 'name' => $name, 'search' => implode(' ', [$collectionId, $name]), ])); diff --git a/docker-compose.yml b/docker-compose.yml index ecb10b9eea..612d59f72a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -177,6 +177,7 @@ services: - _APP_GRAPHQL_MAX_BATCH_SIZE - _APP_GRAPHQL_MAX_COMPLEXITY - _APP_GRAPHQL_MAX_DEPTH + - PHP_IDE_CONFIG=serverName=swoole-http appwrite-realtime: entrypoint: realtime diff --git a/src/Appwrite/Utopia/Response/Model/Database.php b/src/Appwrite/Utopia/Response/Model/Database.php index 9d9a4b2762..bd9ae4625c 100644 --- a/src/Appwrite/Utopia/Response/Model/Database.php +++ b/src/Appwrite/Utopia/Response/Model/Database.php @@ -34,6 +34,12 @@ class Database extends Model 'default' => '', 'example' => self::TYPE_DATETIME_EXAMPLE, ]) + ->addRule('enabled', [ + 'type' => self::TYPE_BOOLEAN, + 'description' => 'Database enabled.', + 'default' => true, + 'example' => false, + ]) ; } diff --git a/tests/e2e/Services/Databases/DatabasesCustomServerTest.php b/tests/e2e/Services/Databases/DatabasesCustomServerTest.php index ce6602c176..bfa2f3dea8 100644 --- a/tests/e2e/Services/Databases/DatabasesCustomServerTest.php +++ b/tests/e2e/Services/Databases/DatabasesCustomServerTest.php @@ -27,6 +27,7 @@ class DatabasesCustomServerTest extends Scope 'databaseId' => ID::custom('first'), 'name' => 'Test 1', ]); + $this->assertEquals(201, $test1['headers']['status-code']); $this->assertEquals('Test 1', $test1['body']['name']); @@ -244,7 +245,7 @@ class DatabasesCustomServerTest extends Scope $this->assertEquals(200, $database['headers']['status-code']); $this->assertEquals($databaseId, $database['body']['$id']); $this->assertEquals('Test 1', $database['body']['name']); - + $this->assertEquals(true, $database['body']['enabled']); return ['databaseId' => $database['body']['$id']]; }