diff --git a/CHANGES.md b/CHANGES.md index b77ca2e3ce..42e3293c5c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,8 +1,28 @@ +# Version 1.3.7 + +## Bugs +- Fix the routing for the default OAuth2 pages [#5640](https://github.com/appwrite/appwrite/pull/5640) [#5648](https://github.com/appwrite/appwrite/pull/5648) +- Add support for trailing slashes in Routes and URLs [#5647](https://github.com/appwrite/appwrite/pull/5647) [#5648](https://github.com/appwrite/appwrite/pull/5648) + +# Version 1.3.6 + +## Bugs + +- Fix Console deep linking to result in a 404 [#5632](https://github.com/appwrite/appwrite/pull/5632) +- Fix ACME HTTP Challenge [#5632](https://github.com/appwrite/appwrite/pull/5632) + +# Version 1.3.5 + +## Bugs + +- Fix minimum length for string attribute default values [#5606](https://github.com/appwrite/appwrite/pull/5606), [#5602](https://github.com/appwrite/appwrite/pull/5602) +- Update framework to fix route mismatches [#5603](https://github.com/appwrite/appwrite/pull/5603) + # Version 1.3.4 ## Bugs -- Update migration to properly migrate bucket permissiosn [#5497](https://github.com/appwrite/appwrite/pull/5497) +- Update migration to properly migrate bucket permissions [#5497](https://github.com/appwrite/appwrite/pull/5497) # Version 1.3.3 @@ -15,6 +35,7 @@ - Fixed auto-setting custom ID on nested documents [#5363](https://github.com/appwrite/appwrite/pull/5363) - Fixed listDocuments not returning all the documents [#5395](https://github.com/appwrite/appwrite/pull/5395) - Fixed deleting keys, webhooks, platforms and domains after deleting project [#5395](https://github.com/appwrite/appwrite/pull/5395) +- Fixed empty team prefs returning as JSON object rather array [#5361](https://github.com/appwrite/appwrite/pull/5361) # Version 1.3.1 diff --git a/README-CN.md b/README-CN.md index 1463722084..d3f52058b5 100644 --- a/README-CN.md +++ b/README-CN.md @@ -66,7 +66,7 @@ docker run -it --rm \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \ --entrypoint="install" \ - appwrite/appwrite:1.3.4 + appwrite/appwrite:1.3.7 ``` ### Windows @@ -78,7 +78,7 @@ docker run -it --rm ^ --volume //var/run/docker.sock:/var/run/docker.sock ^ --volume "%cd%"/appwrite:/usr/src/code/appwrite:rw ^ --entrypoint="install" ^ - appwrite/appwrite:1.3.4 + appwrite/appwrite:1.3.7 ``` #### PowerShell @@ -88,7 +88,7 @@ docker run -it --rm ` --volume /var/run/docker.sock:/var/run/docker.sock ` --volume ${pwd}/appwrite:/usr/src/code/appwrite:rw ` --entrypoint="install" ` - appwrite/appwrite:1.3.4 + appwrite/appwrite:1.3.7 ``` 运行后,可以在浏览器上访问 http://localhost 找到 Appwrite 控制台。在非 Linux 的本机主机上完成安装后,服务器可能需要几分钟才能启动。 diff --git a/README.md b/README.md index 414c4bd0c3..b8fffd110a 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ docker run -it --rm \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \ --entrypoint="install" \ - appwrite/appwrite:1.3.4 + appwrite/appwrite:1.3.7 ``` ### Windows @@ -87,7 +87,7 @@ docker run -it --rm ^ --volume //var/run/docker.sock:/var/run/docker.sock ^ --volume "%cd%"/appwrite:/usr/src/code/appwrite:rw ^ --entrypoint="install" ^ - appwrite/appwrite:1.3.4 + appwrite/appwrite:1.3.7 ``` #### PowerShell @@ -97,7 +97,7 @@ docker run -it --rm ` --volume /var/run/docker.sock:/var/run/docker.sock ` --volume ${pwd}/appwrite:/usr/src/code/appwrite:rw ` --entrypoint="install" ` - appwrite/appwrite:1.3.4 + appwrite/appwrite:1.3.7 ``` Once the Docker installation is complete, go to http://localhost to access the Appwrite console from your browser. Please note that on non-Linux native hosts, the server might take a few minutes to start after completing the installation. diff --git a/app/config/collections.php b/app/config/collections.php index a8cf798458..f7fe4886ed 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/config/errors.php b/app/config/errors.php index 82f8dfb592..9fb0dd8c42 100644 --- a/app/config/errors.php +++ b/app/config/errors.php @@ -112,7 +112,7 @@ return [ ], Exception::USER_BLOCKED => [ 'name' => Exception::USER_BLOCKED, - 'description' => 'The current user has been blocked. You can unblock the user from the Appwrite console.', + 'description' => 'The current user has been blocked.', 'code' => 401, ], Exception::USER_INVALID_TOKEN => [ @@ -403,9 +403,14 @@ return [ 'description' => 'The document structure is invalid. Please ensure the attributes match the collection definition.', 'code' => 400, ], + Exception::DOCUMENT_MISSING_DATA => [ + 'name' => Exception::DOCUMENT_MISSING_DATA, + 'description' => 'The document data is missing. You must provide the document data.', + 'code' => 400, + ], Exception::DOCUMENT_MISSING_PAYLOAD => [ 'name' => Exception::DOCUMENT_MISSING_PAYLOAD, - 'description' => 'The document payload is missing.', + 'description' => 'The document data and permissions are missing. You must provide either the document data or permissions to be updated.', 'code' => 400, ], Exception::DOCUMENT_ALREADY_EXISTS => [ @@ -494,6 +499,11 @@ return [ 'description' => 'Project with the requested ID could not be found. Please check the value of the X-Appwrite-Project header to ensure the correct project ID is being used.', 'code' => 404, ], + Exception::PROJECT_ALREADY_EXISTS => [ + 'name' => Exception::PROJECT_ALREADY_EXISTS, + 'description' => 'Project with the requested ID already exists.', + 'code' => 409, + ], Exception::PROJECT_UNKNOWN => [ 'name' => Exception::PROJECT_UNKNOWN, 'description' => 'The project ID is either missing or not valid. Please check the value of the X-Appwrite-Project header to ensure the correct project ID is being used.', diff --git a/app/config/platforms.php b/app/config/platforms.php index caff21b28b..e2867c166a 100644 --- a/app/config/platforms.php +++ b/app/config/platforms.php @@ -357,12 +357,12 @@ return [ [ 'key' => 'dotnet', 'name' => '.NET', - 'version' => '2.0.0', + 'version' => '0.4.0', 'url' => 'https://github.com/appwrite/sdk-for-dotnet', 'package' => 'https://www.nuget.org/packages/Appwrite', - 'enabled' => false, + 'enabled' => true, 'beta' => true, - 'dev' => true, + 'dev' => false, 'hidden' => false, 'family' => APP_PLATFORM_SERVER, 'prism' => 'csharp', diff --git a/app/config/variables.php b/app/config/variables.php index 978a853ef6..3d967eb828 100644 --- a/app/config/variables.php +++ b/app/config/variables.php @@ -152,7 +152,7 @@ return [ ], [ 'name' => '_APP_LOGGING_PROVIDER', - 'description' => 'This variable allows you to enable logging errors to 3rd party providers. This value is empty by default, to enable the logger set the value to one of \'sentry\', \'raygun\', \'appsignal\', \'logowl\'', + 'description' => 'This variable allows you to enable logging errors to 3rd party providers. This value is empty by default, to enable the logger set the value to one of \'sentry\', \'raygun\', \'appSignal\', \'logOwl\'', 'introduction' => '0.12.0', 'default' => '', 'required' => false, diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 69b0a68daa..60c5aa3588 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -1741,11 +1741,12 @@ App::patch('/v1/account/status') ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) ->label('sdk.response.model', Response::MODEL_USER) ->inject('requestTimestamp') + ->inject('request') ->inject('response') ->inject('user') ->inject('dbForProject') ->inject('events') - ->action(function (?\DateTime $requestTimestamp, Response $response, Document $user, Database $dbForProject, Event $events) { + ->action(function (?\DateTime $requestTimestamp, Request $request, Response $response, Document $user, Database $dbForProject, Event $events) { $user->setAttribute('status', false); @@ -1759,6 +1760,12 @@ App::patch('/v1/account/status') $response->addHeader('X-Fallback-Cookies', \json_encode([])); } + $protocol = $request->getProtocol(); + $response + ->addCookie(Auth::$cookieName . '_legacy', '', \time() - 3600, '/', Config::getParam('cookieDomain'), ('https' == $protocol), true, null) + ->addCookie(Auth::$cookieName, '', \time() - 3600, '/', Config::getParam('cookieDomain'), ('https' == $protocol), true, Config::getParam('cookieSamesite')) + ; + $response->dynamic($user, Response::MODEL_ACCOUNT); }); diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index 8a18e28dba..a4de380561 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); @@ -507,7 +509,7 @@ App::get('/v1/databases/:databaseId') ->inject('dbForProject') ->action(function (string $databaseId, Response $response, Database $dbForProject) { - $database = $dbForProject->getDocument('databases', $databaseId); + $database = $dbForProject->getDocument('databases', $databaseId); if ($database->isEmpty()) { throw new Exception(Exception::DATABASE_NOT_FOUND); @@ -619,12 +621,13 @@ 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); + $database = $dbForProject->getDocument('databases', $databaseId); if ($database->isEmpty()) { throw new Exception(Exception::DATABASE_NOT_FOUND); @@ -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,14 +718,16 @@ 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('mode') ->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, string $mode, Event $events) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); - if ($database->isEmpty()) { + if ($database->isEmpty() || (!$database->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { throw new Exception(Exception::DATABASE_NOT_FOUND); } @@ -737,7 +743,7 @@ App::post('/v1/databases/:databaseId/collections') 'databaseId' => $databaseId, '$permissions' => $permissions ?? [], 'documentSecurity' => $documentSecurity, - 'enabled' => true, + 'enabled' => $enabled, 'name' => $name, 'search' => implode(' ', [$collectionId, $name]), ])); @@ -779,11 +785,12 @@ App::get('/v1/databases/:databaseId/collections') ->param('search', '', new Text(256), 'Search term to filter your list results. Max length: 256 chars.', true) ->inject('response') ->inject('dbForProject') - ->action(function (string $databaseId, array $queries, string $search, Response $response, Database $dbForProject) { + ->inject('mode') + ->action(function (string $databaseId, array $queries, string $search, Response $response, Database $dbForProject, string $mode) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); - if ($database->isEmpty()) { + if ($database->isEmpty() || (!$database->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { throw new Exception(Exception::DATABASE_NOT_FOUND); } @@ -834,11 +841,12 @@ App::get('/v1/databases/:databaseId/collections/:collectionId') ->param('collectionId', '', new UID(), 'Collection ID.') ->inject('response') ->inject('dbForProject') - ->action(function (string $databaseId, string $collectionId, Response $response, Database $dbForProject) { + ->inject('mode') + ->action(function (string $databaseId, string $collectionId, Response $response, Database $dbForProject, string $mode) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); - if ($database->isEmpty()) { + if ($database->isEmpty() || (!$database->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { throw new Exception(Exception::DATABASE_NOT_FOUND); } @@ -874,7 +882,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/logs') ->inject('geodb') ->action(function (string $databaseId, string $collectionId, array $queries, Response $response, Database $dbForProject, Locale $locale, Reader $geodb) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { throw new Exception(Exception::DATABASE_NOT_FOUND); @@ -972,12 +980,13 @@ App::put('/v1/databases/:databaseId/collections/:collectionId') ->param('enabled', true, new Boolean(), 'Is collection enabled?', true) ->inject('response') ->inject('dbForProject') + ->inject('mode') ->inject('events') - ->action(function (string $databaseId, string $collectionId, string $name, ?array $permissions, bool $documentSecurity, bool $enabled, Response $response, Database $dbForProject, Event $events) { + ->action(function (string $databaseId, string $collectionId, string $name, ?array $permissions, bool $documentSecurity, bool $enabled, Response $response, Database $dbForProject, string $mode, Event $events) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); - if ($database->isEmpty()) { + if ($database->isEmpty() || (!$database->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { throw new Exception(Exception::DATABASE_NOT_FOUND); } @@ -1036,13 +1045,14 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId') ->param('collectionId', '', new UID(), 'Collection ID.') ->inject('response') ->inject('dbForProject') + ->inject('mode') ->inject('events') ->inject('deletes') - ->action(function (string $databaseId, string $collectionId, Response $response, Database $dbForProject, Event $events, Delete $deletes) { + ->action(function (string $databaseId, string $collectionId, Response $response, Database $dbForProject, string $mode, Event $events, Delete $deletes) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); - if ($database->isEmpty()) { + if ($database->isEmpty() || (!$database->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { throw new Exception(Exception::DATABASE_NOT_FOUND); } @@ -1060,15 +1070,13 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId') $deletes ->setType(DELETE_TYPE_DOCUMENT) - ->setDocument($collection) - ; + ->setDocument($collection); $events ->setContext('database', $database) ->setParam('databaseId', $databaseId) ->setParam('collectionId', $collection->getId()) - ->setPayload($response->output($collection, Response::MODEL_COLLECTION)) - ; + ->setPayload($response->output($collection, Response::MODEL_COLLECTION)); $response->noContent(); }); @@ -1095,7 +1103,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/string ->param('key', '', new Key(), 'Attribute Key.') ->param('size', null, new Range(1, APP_DATABASE_ATTRIBUTE_STRING_MAX_LENGTH, Range::TYPE_INTEGER), 'Attribute size for text attributes, in number of characters.') ->param('required', null, new Boolean(), 'Is attribute required?') - ->param('default', null, new Text(0), 'Default value for attribute when not provided. Cannot be set when attribute is required.', true) + ->param('default', null, new Text(0, 0), 'Default value for attribute when not provided. Cannot be set when attribute is required.', true) ->param('array', false, new Boolean(), 'Is attribute an array?', true) ->inject('response') ->inject('dbForProject') @@ -1104,7 +1112,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/string ->action(function (string $databaseId, string $collectionId, string $key, ?int $size, ?bool $required, ?string $default, bool $array, Response $response, Database $dbForProject, EventDatabase $database, Event $events) { // Ensure attribute default is within required size - $validator = new Text($size); + $validator = new Text($size, 0); if (!is_null($default) && !$validator->isValid($default)) { throw new Exception(Exception::ATTRIBUTE_VALUE_INVALID, $validator->getDescription()); } @@ -1593,7 +1601,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/relati Database $dbForProject, EventDatabase $database, Event $events -) { + ) { $key ??= $relatedCollectionId; $twoWayKey ??= $collectionId; @@ -1653,7 +1661,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/attributes') ->inject('dbForProject') ->action(function (string $databaseId, string $collectionId, Response $response, Database $dbForProject) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { throw new Exception(Exception::DATABASE_NOT_FOUND); @@ -1704,7 +1712,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/attributes/:key') ->inject('dbForProject') ->action(function (string $databaseId, string $collectionId, string $key, Response $response, Database $dbForProject) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { throw new Exception(Exception::DATABASE_NOT_FOUND); @@ -1769,7 +1777,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/strin ->param('collectionId', '', new UID(), 'Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection).') ->param('key', '', new Key(), 'Attribute Key.') ->param('required', null, new Boolean(), 'Is attribute required?') - ->param('default', null, new Nullable(new Text(0)), 'Default value for attribute when not provided. Cannot be set when attribute is required.') + ->param('default', null, new Nullable(new Text(0, 0)), 'Default value for attribute when not provided. Cannot be set when attribute is required.') ->inject('response') ->inject('dbForProject') ->inject('events') @@ -2177,7 +2185,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/:key/ $events, type: Database::VAR_RELATIONSHIP, required: false, - options : [ + options: [ 'onDelete' => $onDelete ] ); @@ -2218,7 +2226,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key ->inject('events') ->action(function (string $databaseId, string $collectionId, string $key, Response $response, Database $dbForProject, EventDatabase $database, Event $events) { - $db = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $db = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); if ($db->isEmpty()) { throw new Exception(Exception::DATABASE_NOT_FOUND); @@ -2271,8 +2279,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key ->setType(DATABASE_TYPE_DELETE_ATTRIBUTE) ->setCollection($collection) ->setDatabase($db) - ->setDocument($attribute) - ; + ->setDocument($attribute); // Select response model based on type and format $type = $attribute->getAttribute('type'); @@ -2300,8 +2307,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key ->setParam('attributeId', $attribute->getId()) ->setContext('collection', $collection) ->setContext('database', $db) - ->setPayload($response->output($attribute, $model)) - ; + ->setPayload($response->output($attribute, $model)); $response->noContent(); }); @@ -2335,7 +2341,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/indexes') ->inject('events') ->action(function (string $databaseId, string $collectionId, string $key, string $type, array $attributes, array $orders, Response $response, Database $dbForProject, EventDatabase $database, Event $events) { - $db = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $db = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); if ($db->isEmpty()) { throw new Exception(Exception::DATABASE_NOT_FOUND); @@ -2358,7 +2364,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/indexes') } // Convert Document[] to array of attribute metadata - $oldAttributes = \array_map(fn ($a) => $a->getArrayCopy(), $collection->getAttribute('attributes')); + $oldAttributes = \array_map(fn($a) => $a->getArrayCopy(), $collection->getAttribute('attributes')); $oldAttributes[] = [ 'key' => '$id', @@ -2444,16 +2450,14 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/indexes') ->setType(DATABASE_TYPE_CREATE_INDEX) ->setDatabase($db) ->setCollection($collection) - ->setDocument($index) - ; + ->setDocument($index); $events ->setParam('databaseId', $databaseId) ->setParam('collectionId', $collection->getId()) ->setParam('indexId', $index->getId()) ->setContext('collection', $collection) - ->setContext('database', $db) - ; + ->setContext('database', $db); $response ->setStatusCode(Response::STATUS_CODE_ACCEPTED) @@ -2480,7 +2484,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/indexes') ->inject('dbForProject') ->action(function (string $databaseId, string $collectionId, Response $response, Database $dbForProject) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { throw new Exception(Exception::DATABASE_NOT_FOUND); @@ -2520,7 +2524,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') ->inject('dbForProject') ->action(function (string $databaseId, string $collectionId, string $key, Response $response, Database $dbForProject) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { throw new Exception(Exception::DATABASE_NOT_FOUND); @@ -2571,7 +2575,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') ->inject('events') ->action(function (string $databaseId, string $collectionId, string $key, Response $response, Database $dbForProject, EventDatabase $database, Event $events) { - $db = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $db = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); if ($db->isEmpty()) { throw new Exception(Exception::DATABASE_NOT_FOUND); @@ -2599,8 +2603,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') ->setType(DATABASE_TYPE_DELETE_INDEX) ->setDatabase($db) ->setCollection($collection) - ->setDocument($index) - ; + ->setDocument($index); $events ->setParam('databaseId', $databaseId) @@ -2608,8 +2611,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') ->setParam('indexId', $index->getId()) ->setContext('collection', $collection) ->setContext('database', $db) - ->setPayload($response->output($index, Response::MODEL_INDEX)) - ; + ->setPayload($response->output($index, Response::MODEL_INDEX)); $response->noContent(); }); @@ -2651,7 +2653,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents') $data = (\is_string($data)) ? \json_decode($data, true) : $data; // Cast to JSON array if (empty($data)) { - throw new Exception(Exception::DOCUMENT_MISSING_PAYLOAD); + throw new Exception(Exception::DOCUMENT_MISSING_DATA); } if (isset($data['$id'])) { @@ -2660,7 +2662,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents') $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); - if ($database->isEmpty()) { + if ($database->isEmpty() || (!$database->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { throw new Exception(Exception::DATABASE_NOT_FOUND); } @@ -2735,7 +2737,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents') $relationships = \array_filter( $collection->getAttribute('attributes', []), - fn ($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP + fn($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP ); foreach ($relationships as $relationship) { @@ -2814,7 +2816,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents') $relationships = \array_filter( $collection->getAttribute('attributes', []), - fn ($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP + fn($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP ); foreach ($relationships as $relationship) { @@ -2847,8 +2849,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents') ->setParam('collectionId', $collection->getId()) ->setParam('documentId', $document->getId()) ->setContext('collection', $collection) - ->setContext('database', $database) - ; + ->setContext('database', $database); $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -2878,9 +2879,9 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents') ->inject('mode') ->action(function (string $databaseId, string $collectionId, array $queries, Response $response, Database $dbForProject, string $mode) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); - if ($database->isEmpty()) { + if ($database->isEmpty() || (!$database->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { throw new Exception(Exception::DATABASE_NOT_FOUND); } @@ -2940,7 +2941,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents') $relationships = \array_filter( $collection->getAttribute('attributes', []), - fn ($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP + fn($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP ); foreach ($relationships as $relationship) { @@ -2956,8 +2957,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents') } $relatedCollectionId = $relationship->getAttribute('relatedCollection'); - $relatedCollection = Authorization::skip(fn() => - $dbForProject->getDocument('database_' . $database->getInternalId(), $relatedCollectionId)); + $relatedCollection = Authorization::skip(fn() => $dbForProject->getDocument('database_' . $database->getInternalId(), $relatedCollectionId)); foreach ($relations as $index => $doc) { if ($doc instanceof Document) { @@ -2977,7 +2977,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents') return true; }; - // The linter is forcing this indentation + // The linter is forcing this indentation foreach ($documents as $document) { $processDocument($collection, $document); } @@ -3013,9 +3013,9 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen ->inject('mode') ->action(function (string $databaseId, string $collectionId, string $documentId, array $queries, Response $response, Database $dbForProject, string $mode) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); - if ($database->isEmpty()) { + if ($database->isEmpty() || (!$database->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { throw new Exception(Exception::DATABASE_NOT_FOUND); } @@ -3053,7 +3053,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen $relationships = \array_filter( $collection->getAttribute('attributes', []), - fn ($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP + fn($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP ); foreach ($relationships as $relationship) { @@ -3108,7 +3108,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen ->inject('geodb') ->action(function (string $databaseId, string $collectionId, string $documentId, array $queries, Response $response, Database $dbForProject, Locale $locale, Reader $geodb) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { throw new Exception(Exception::DATABASE_NOT_FOUND); @@ -3225,9 +3225,9 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:docum throw new Exception(Exception::DOCUMENT_MISSING_PAYLOAD); } - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); - if ($database->isEmpty()) { + if ($database->isEmpty() || (!$database->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { throw new Exception(Exception::DATABASE_NOT_FOUND); } @@ -3304,7 +3304,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:docum $relationships = \array_filter( $collection->getAttribute('attributes', []), - fn ($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP + fn($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP ); foreach ($relationships as $relationship) { @@ -3372,7 +3372,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:docum try { $document = $dbForProject->withRequestTimestamp( $requestTimestamp, - fn () => $dbForProject->updateDocument( + fn() => $dbForProject->updateDocument( 'database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), $document->getId(), $newDocument @@ -3393,7 +3393,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:docum $relationships = \array_filter( $collection->getAttribute('attributes', []), - fn ($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP + fn($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP ); foreach ($relationships as $relationship) { @@ -3426,8 +3426,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:docum ->setParam('collectionId', $collection->getId()) ->setParam('documentId', $document->getId()) ->setContext('collection', $collection) - ->setContext('database', $database) - ; + ->setContext('database', $database); $response->dynamic($document, Response::MODEL_DOCUMENT); }); @@ -3464,9 +3463,9 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu ->inject('mode') ->action(function (string $databaseId, string $collectionId, string $documentId, ?\DateTime $requestTimestamp, Response $response, Database $dbForProject, Event $events, Delete $deletes, string $mode) { - $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); + $database = Authorization::skip(fn() => $dbForProject->getDocument('databases', $databaseId)); - if ($database->isEmpty()) { + if ($database->isEmpty() || (!$database->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { throw new Exception(Exception::DATABASE_NOT_FOUND); } @@ -3501,7 +3500,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu $relationships = \array_filter( $collection->getAttribute('attributes', []), - fn ($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP + fn($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP ); foreach ($relationships as $relationship) { @@ -3532,7 +3531,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu $checkPermissions($collection, $document); - Authorization::skip(fn () => $dbForProject->withRequestTimestamp($requestTimestamp, function () use ($dbForProject, $database, $collection, $documentId) { + Authorization::skip(fn() => $dbForProject->withRequestTimestamp($requestTimestamp, function () use ($dbForProject, $database, $collection, $documentId) { try { $dbForProject->deleteDocument( 'database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), @@ -3555,7 +3554,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu $relationships = \array_filter( $collection->getAttribute('attributes', []), - fn ($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP + fn($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP ); foreach ($relationships as $relationship) { @@ -3585,8 +3584,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu $deletes ->setType(DELETE_TYPE_AUDIT) - ->setDocument($document) - ; + ->setDocument($document); $events ->setParam('databaseId', $databaseId) @@ -3594,8 +3592,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu ->setParam('documentId', $document->getId()) ->setContext('collection', $collection) ->setContext('database', $database) - ->setPayload($response->output($document, Response::MODEL_DOCUMENT)) - ; + ->setPayload($response->output($document, Response::MODEL_DOCUMENT)); $response->noContent(); }); @@ -3700,16 +3697,16 @@ App::get('/v1/databases/usage') 'databasesCount' => $stats['databases.$all.count.total'] ?? [], 'documentsCount' => $stats['documents.$all.count.total'] ?? [], 'collectionsCount' => $stats['collections.$all.count.total'] ?? [], - 'documentsCreate' => $stats['documents.$all.requests.create'] ?? [], - 'documentsRead' => $stats['documents.$all.requests.read'] ?? [], + 'documentsCreate' => $stats['documents.$all.requests.create'] ?? [], + 'documentsRead' => $stats['documents.$all.requests.read'] ?? [], 'documentsUpdate' => $stats['documents.$all.requests.update'] ?? [], 'documentsDelete' => $stats['documents.$all.requests.delete'] ?? [], 'collectionsCreate' => $stats['collections.$all.requests.create'] ?? [], - 'collectionsRead' => $stats['collections.$all.requests.read'] ?? [], + 'collectionsRead' => $stats['collections.$all.requests.read'] ?? [], 'collectionsUpdate' => $stats['collections.$all.requests.update'] ?? [], 'collectionsDelete' => $stats['collections.$all.requests.delete'] ?? [], 'databasesCreate' => $stats['databases.$all.requests.create'] ?? [], - 'databasesRead' => $stats['databases.$all.requests.read'] ?? [], + 'databasesRead' => $stats['databases.$all.requests.read'] ?? [], 'databasesUpdate' => $stats['databases.$all.requests.update'] ?? [], 'databasesDelete' => $stats['databases.$all.requests.delete'] ?? [], ]); @@ -3813,12 +3810,12 @@ App::get('/v1/databases/:databaseId/usage') 'range' => $range, 'collectionsCount' => $stats["collections.{$databaseId}.count.total"] ?? [], 'collectionsCreate' => $stats["collections.{$databaseId}.requests.create"] ?? [], - 'collectionsRead' => $stats["collections.{$databaseId}.requests.read"] ?? [], + 'collectionsRead' => $stats["collections.{$databaseId}.requests.read"] ?? [], 'collectionsUpdate' => $stats["collections.{$databaseId}.requests.update"] ?? [], 'collectionsDelete' => $stats["collections.{$databaseId}.requests.delete"] ?? [], 'documentsCount' => $stats["documents.{$databaseId}.count.total"] ?? [], - 'documentsCreate' => $stats["documents.{$databaseId}.requests.create"] ?? [], - 'documentsRead' => $stats["documents.{$databaseId}.requests.read"] ?? [], + 'documentsCreate' => $stats["documents.{$databaseId}.requests.create"] ?? [], + 'documentsRead' => $stats["documents.{$databaseId}.requests.read"] ?? [], 'documentsUpdate' => $stats["documents.{$databaseId}.requests.update"] ?? [], 'documentsDelete' => $stats["documents.{$databaseId}.requests.delete"] ?? [], ]); @@ -3928,8 +3925,8 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/usage') 'documentsCount' => $stats["documents.{$databaseId}/{$collectionId}.count.total"] ?? [], 'documentsCreate' => $stats["documents.{$databaseId}/{$collectionId}.requests.create"] ?? [], 'documentsRead' => $stats["documents.{$databaseId}/{$collectionId}.requests.read"] ?? [], - 'documentsUpdate' => $stats["documents.{$databaseId}/{$collectionId}.requests.update"] ?? [], - 'documentsDelete' => $stats["documents.{$databaseId}/{$collectionId}.requests.delete" ?? []] + 'documentsUpdate' => $stats["documents.{$databaseId}/{$collectionId}.requests.update"] ?? [], + 'documentsDelete' => $stats["documents.{$databaseId}/{$collectionId}.requests.delete" ?? []] ]); } diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index e68527af60..6f67a3413a 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -29,6 +29,7 @@ use Utopia\Domains\Domain; use Utopia\Registry\Registry; use Appwrite\Extend\Exception; use Appwrite\Utopia\Database\Validator\Queries\Projects; +use Utopia\Database\Exception\Duplicate; use Utopia\Validator\ArrayList; use Utopia\Validator\Boolean; use Utopia\Validator\Hostname; @@ -91,38 +92,43 @@ App::post('/v1/projects') throw new Exception(Exception::PROJECT_RESERVED_PROJECT, "'console' is a reserved project."); } - $project = $dbForConsole->createDocument('projects', new Document([ - '$id' => $projectId, - '$permissions' => [ - Permission::read(Role::team(ID::custom($teamId))), - Permission::update(Role::team(ID::custom($teamId), 'owner')), - Permission::update(Role::team(ID::custom($teamId), 'developer')), - Permission::delete(Role::team(ID::custom($teamId), 'owner')), - Permission::delete(Role::team(ID::custom($teamId), 'developer')), - ], - 'name' => $name, - 'teamInternalId' => $team->getInternalId(), - 'teamId' => $team->getId(), - 'region' => $region, - 'description' => $description, - 'logo' => $logo, - 'url' => $url, - 'version' => APP_VERSION_STABLE, - 'legalName' => $legalName, - 'legalCountry' => $legalCountry, - 'legalState' => $legalState, - 'legalCity' => $legalCity, - 'legalAddress' => $legalAddress, - 'legalTaxId' => ID::custom($legalTaxId), - 'services' => new stdClass(), - 'platforms' => null, - 'authProviders' => [], - 'webhooks' => null, - 'keys' => null, - 'domains' => null, - 'auths' => $auths, - 'search' => implode(' ', [$projectId, $name]), - ])); + try { + $project = $dbForConsole->createDocument('projects', new Document([ + '$id' => $projectId, + '$permissions' => [ + Permission::read(Role::team(ID::custom($teamId))), + Permission::update(Role::team(ID::custom($teamId), 'owner')), + Permission::update(Role::team(ID::custom($teamId), 'developer')), + Permission::delete(Role::team(ID::custom($teamId), 'owner')), + Permission::delete(Role::team(ID::custom($teamId), 'developer')), + ], + 'name' => $name, + 'teamInternalId' => $team->getInternalId(), + 'teamId' => $team->getId(), + 'region' => $region, + 'description' => $description, + 'logo' => $logo, + 'url' => $url, + 'version' => APP_VERSION_STABLE, + 'legalName' => $legalName, + 'legalCountry' => $legalCountry, + 'legalState' => $legalState, + 'legalCity' => $legalCity, + 'legalAddress' => $legalAddress, + 'legalTaxId' => ID::custom($legalTaxId), + 'services' => new stdClass(), + 'platforms' => null, + 'authProviders' => [], + 'webhooks' => null, + 'keys' => null, + 'domains' => null, + 'auths' => $auths, + 'search' => implode(' ', [$projectId, $name]), + ])); + } catch (Duplicate $th) { + throw new Exception(Exception::PROJECT_ALREADY_EXISTS); + } + /** @var array $collections */ $collections = Config::getParam('collections', []); diff --git a/app/controllers/api/storage.php b/app/controllers/api/storage.php index 1142333e63..955f6d4ff7 100644 --- a/app/controllers/api/storage.php +++ b/app/controllers/api/storage.php @@ -515,6 +515,7 @@ App::post('/v1/storage/buckets/:bucketId/files') } $mimeType = $deviceFiles->getFileMimeType($path); // Get mime-type before compression and encryption + $fileHash = $deviceFiles->getFileHash($path); // Get file hash before compression and encryption $data = ''; // Compression $algorithm = $bucket->getAttribute('compression', COMPRESSION_TYPE_NONE); @@ -548,7 +549,6 @@ App::post('/v1/storage/buckets/:bucketId/files') } $sizeActual = $deviceFiles->getFileSize($path); - $fileHash = $deviceFiles->getFileHash($path); $openSSLVersion = null; $openSSLCipher = null; diff --git a/app/controllers/general.php b/app/controllers/general.php index fa2ad2312a..771809d534 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -436,7 +436,7 @@ App::error() $log->addExtra('line', $error->getLine()); $log->addExtra('trace', $error->getTraceAsString()); $log->addExtra('detailedTrace', $error->getTrace()); - $log->addExtra('roles', Authorization::$roles); + $log->addExtra('roles', Authorization::getRoles()); $action = $route->getLabel("sdk.namespace", "UNKNOWN_NAMESPACE") . '.' . $route->getLabel("sdk.method", "UNKNOWN_METHOD"); $log->setAction($action); @@ -583,7 +583,7 @@ App::get('/humans.txt') $response->text($template->render(false)); }); -App::get('/.well-known/acme-challenge') +App::get('/.well-known/acme-challenge/*') ->desc('SSL Verification') ->label('scope', 'public') ->label('docs', false) diff --git a/app/controllers/web/console.php b/app/controllers/web/console.php index 8115f09285..59aad607c1 100644 --- a/app/controllers/web/console.php +++ b/app/controllers/web/console.php @@ -3,12 +3,13 @@ use Appwrite\Utopia\Response; use Utopia\App; -App::get('/console') +App::get('/console/*') ->alias('/') + ->alias('auth/*') ->alias('/invite') ->alias('/login') ->alias('/recover') - ->alias('/register') + ->alias('/register/*') ->groups(['web']) ->label('permission', 'public') ->label('scope', 'home') diff --git a/app/init.php b/app/init.php index e276fd898d..6a0d89e97d 100644 --- a/app/init.php +++ b/app/init.php @@ -100,8 +100,8 @@ const APP_LIMIT_WRITE_RATE_PERIOD_DEFAULT = 60; // Default maximum write rate pe const APP_LIMIT_LIST_DEFAULT = 25; // Default maximum number of items to return in list API calls const APP_KEY_ACCCESS = 24 * 60 * 60; // 24 hours const APP_CACHE_UPDATE = 24 * 60 * 60; // 24 hours -const APP_CACHE_BUSTER = 503; -const APP_VERSION_STABLE = '1.3.4'; +const APP_CACHE_BUSTER = 506; +const APP_VERSION_STABLE = '1.3.7'; const APP_DATABASE_ATTRIBUTE_EMAIL = 'email'; const APP_DATABASE_ATTRIBUTE_ENUM = 'enum'; const APP_DATABASE_ATTRIBUTE_IP = 'ip'; diff --git a/app/tasks/install.php b/app/tasks/install.php index 0f15af2eda..651042664b 100644 --- a/app/tasks/install.php +++ b/app/tasks/install.php @@ -224,9 +224,9 @@ $cli } } - Console::log("Running \"docker compose -f {$path}/docker-compose.yml up -d --remove-orphans --renew-anon-volumes\""); + Console::log("Running \"docker compose up -d --remove-orphans --renew-anon-volumes\""); - $exit = Console::execute("${env} docker compose -f {$path}/docker-compose.yml up -d --remove-orphans --renew-anon-volumes", '', $stdout, $stderr); + $exit = Console::execute("${env} docker compose --project-directory {$path} up -d --remove-orphans --renew-anon-volumes", '', $stdout, $stderr); if ($exit !== 0) { $message = 'Failed to install Appwrite dockers'; diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/create-phone-verification.md b/docs/examples/1.3.x/server-dotnet/examples/account/create-phone-verification.md new file mode 100644 index 0000000000..32e8ea1728 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/create-phone-verification.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +Token result = await account.CreatePhoneVerification(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/create-recovery.md b/docs/examples/1.3.x/server-dotnet/examples/account/create-recovery.md new file mode 100644 index 0000000000..20cdd7e827 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/create-recovery.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +Token result = await account.CreateRecovery( + email: "email@example.com", + url: "https://example.com"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/create-verification.md b/docs/examples/1.3.x/server-dotnet/examples/account/create-verification.md new file mode 100644 index 0000000000..4a103ef85b --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/create-verification.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +Token result = await account.CreateVerification( + url: "https://example.com"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/delete-session.md b/docs/examples/1.3.x/server-dotnet/examples/account/delete-session.md new file mode 100644 index 0000000000..fe61cefa7f --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/delete-session.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +await account.DeleteSession( + sessionId: "[SESSION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/delete-sessions.md b/docs/examples/1.3.x/server-dotnet/examples/account/delete-sessions.md new file mode 100644 index 0000000000..8c37060ef8 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/delete-sessions.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +await account.DeleteSessions(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/get-prefs.md b/docs/examples/1.3.x/server-dotnet/examples/account/get-prefs.md new file mode 100644 index 0000000000..6d7d9ea2b5 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/get-prefs.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +Preferences result = await account.GetPrefs(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/get-session.md b/docs/examples/1.3.x/server-dotnet/examples/account/get-session.md new file mode 100644 index 0000000000..4d2e716eeb --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/get-session.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +Session result = await account.GetSession( + sessionId: "[SESSION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/get.md b/docs/examples/1.3.x/server-dotnet/examples/account/get.md new file mode 100644 index 0000000000..9853c6af1a --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/get.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +User result = await account.Get(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/list-logs.md b/docs/examples/1.3.x/server-dotnet/examples/account/list-logs.md new file mode 100644 index 0000000000..9f4712ea06 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/list-logs.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +LogList result = await account.ListLogs(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/list-sessions.md b/docs/examples/1.3.x/server-dotnet/examples/account/list-sessions.md new file mode 100644 index 0000000000..232319e5f9 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/list-sessions.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +SessionList result = await account.ListSessions(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/update-email.md b/docs/examples/1.3.x/server-dotnet/examples/account/update-email.md new file mode 100644 index 0000000000..1208095f87 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/update-email.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +User result = await account.UpdateEmail( + email: "email@example.com", + password: "password"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/update-name.md b/docs/examples/1.3.x/server-dotnet/examples/account/update-name.md new file mode 100644 index 0000000000..f8dfbf5b11 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/update-name.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +User result = await account.UpdateName( + name: "[NAME]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/update-password.md b/docs/examples/1.3.x/server-dotnet/examples/account/update-password.md new file mode 100644 index 0000000000..1a0e586b1f --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/update-password.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +User result = await account.UpdatePassword( + password: ""); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/update-phone-verification.md b/docs/examples/1.3.x/server-dotnet/examples/account/update-phone-verification.md new file mode 100644 index 0000000000..fafcea78ea --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/update-phone-verification.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +Token result = await account.UpdatePhoneVerification( + userId: "[USER_ID]", + secret: "[SECRET]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/update-phone.md b/docs/examples/1.3.x/server-dotnet/examples/account/update-phone.md new file mode 100644 index 0000000000..ccea754594 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/update-phone.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +User result = await account.UpdatePhone( + phone: "+12065550100", + password: "password"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/update-prefs.md b/docs/examples/1.3.x/server-dotnet/examples/account/update-prefs.md new file mode 100644 index 0000000000..040815b675 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/update-prefs.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +User result = await account.UpdatePrefs( + prefs: [object]); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/update-recovery.md b/docs/examples/1.3.x/server-dotnet/examples/account/update-recovery.md new file mode 100644 index 0000000000..07f09f758c --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/update-recovery.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +Token result = await account.UpdateRecovery( + userId: "[USER_ID]", + secret: "[SECRET]", + password: "password", + passwordAgain: "password"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/update-session.md b/docs/examples/1.3.x/server-dotnet/examples/account/update-session.md new file mode 100644 index 0000000000..7c2443a250 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/update-session.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +Session result = await account.UpdateSession( + sessionId: "[SESSION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/update-status.md b/docs/examples/1.3.x/server-dotnet/examples/account/update-status.md new file mode 100644 index 0000000000..0233b5d84d --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/update-status.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +User result = await account.UpdateStatus(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/account/update-verification.md b/docs/examples/1.3.x/server-dotnet/examples/account/update-verification.md new file mode 100644 index 0000000000..23c3a99829 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/account/update-verification.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var account = new Account(client); + +Token result = await account.UpdateVerification( + userId: "[USER_ID]", + secret: "[SECRET]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/avatars/get-browser.md b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-browser.md new file mode 100644 index 0000000000..4150d3a5c0 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-browser.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var avatars = new Avatars(client); + +byte[] result = await avatars.GetBrowser( + code: "aa"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/avatars/get-credit-card.md b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-credit-card.md new file mode 100644 index 0000000000..47cd89c89c --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-credit-card.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var avatars = new Avatars(client); + +byte[] result = await avatars.GetCreditCard( + code: "amex"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/avatars/get-favicon.md b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-favicon.md new file mode 100644 index 0000000000..0711dd3815 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-favicon.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var avatars = new Avatars(client); + +byte[] result = await avatars.GetFavicon( + url: "https://example.com"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/avatars/get-flag.md b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-flag.md new file mode 100644 index 0000000000..9c19d1a39d --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-flag.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var avatars = new Avatars(client); + +byte[] result = await avatars.GetFlag( + code: "af"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/avatars/get-image.md b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-image.md new file mode 100644 index 0000000000..a5888ad934 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-image.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var avatars = new Avatars(client); + +byte[] result = await avatars.GetImage( + url: "https://example.com"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/avatars/get-initials.md b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-initials.md new file mode 100644 index 0000000000..c037de2c63 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-initials.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var avatars = new Avatars(client); + +byte[] result = await avatars.GetInitials(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/avatars/get-q-r.md b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-q-r.md new file mode 100644 index 0000000000..ff2634d43e --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/avatars/get-q-r.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var avatars = new Avatars(client); + +byte[] result = await avatars.GetQR( + text: "[TEXT]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-boolean-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-boolean-attribute.md new file mode 100644 index 0000000000..b29a7fa2be --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-boolean-attribute.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeBoolean result = await databases.CreateBooleanAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-collection.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-collection.md new file mode 100644 index 0000000000..fa0bf3bf95 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-collection.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +Collection result = await databases.CreateCollection( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + name: "[NAME]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-datetime-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-datetime-attribute.md new file mode 100644 index 0000000000..c44cc40b05 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-datetime-attribute.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeDatetime result = await databases.CreateDatetimeAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-document.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-document.md new file mode 100644 index 0000000000..01532a3f77 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-document.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +Document result = await databases.CreateDocument( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + documentId: "[DOCUMENT_ID]", + data: [object]); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-email-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-email-attribute.md new file mode 100644 index 0000000000..7724160754 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-email-attribute.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeEmail result = await databases.CreateEmailAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-enum-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-enum-attribute.md new file mode 100644 index 0000000000..239d09d311 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-enum-attribute.md @@ -0,0 +1,16 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeEnum result = await databases.CreateEnumAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + elements: new List {}, + required: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-float-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-float-attribute.md new file mode 100644 index 0000000000..382d4ade07 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-float-attribute.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeFloat result = await databases.CreateFloatAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-index.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-index.md new file mode 100644 index 0000000000..7cf5f507cb --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-index.md @@ -0,0 +1,16 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +Index result = await databases.CreateIndex( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + type: "key", + attributes: new List {}); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-integer-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-integer-attribute.md new file mode 100644 index 0000000000..d3b95a77bf --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-integer-attribute.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeInteger result = await databases.CreateIntegerAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-ip-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-ip-attribute.md new file mode 100644 index 0000000000..4fd8de1816 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-ip-attribute.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeIp result = await databases.CreateIpAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-relationship-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-relationship-attribute.md new file mode 100644 index 0000000000..036211af22 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-relationship-attribute.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeRelationship result = await databases.CreateRelationshipAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + relatedCollectionId: "[RELATED_COLLECTION_ID]", + type: "oneToOne"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-string-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-string-attribute.md new file mode 100644 index 0000000000..af1f9e47f6 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-string-attribute.md @@ -0,0 +1,16 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeString result = await databases.CreateStringAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + size: 1, + required: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create-url-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create-url-attribute.md new file mode 100644 index 0000000000..d0d43e93f1 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create-url-attribute.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeUrl result = await databases.CreateUrlAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/create.md b/docs/examples/1.3.x/server-dotnet/examples/databases/create.md new file mode 100644 index 0000000000..c1e62ca1d3 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/create.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +Database result = await databases.Create( + databaseId: "[DATABASE_ID]", + name: "[NAME]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/delete-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/delete-attribute.md new file mode 100644 index 0000000000..b79abd9427 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/delete-attribute.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +await databases.DeleteAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: ""); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/delete-collection.md b/docs/examples/1.3.x/server-dotnet/examples/databases/delete-collection.md new file mode 100644 index 0000000000..1530e3354f --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/delete-collection.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +await databases.DeleteCollection( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/delete-document.md b/docs/examples/1.3.x/server-dotnet/examples/databases/delete-document.md new file mode 100644 index 0000000000..d20281ed96 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/delete-document.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +await databases.DeleteDocument( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + documentId: "[DOCUMENT_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/delete-index.md b/docs/examples/1.3.x/server-dotnet/examples/databases/delete-index.md new file mode 100644 index 0000000000..3045ba945a --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/delete-index.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +await databases.DeleteIndex( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: ""); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/delete.md b/docs/examples/1.3.x/server-dotnet/examples/databases/delete.md new file mode 100644 index 0000000000..c367cc4248 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/delete.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +await databases.Delete( + databaseId: "[DATABASE_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/get-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/get-attribute.md new file mode 100644 index 0000000000..16671ec673 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/get-attribute.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + + result = await databases.GetAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: ""); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/get-collection.md b/docs/examples/1.3.x/server-dotnet/examples/databases/get-collection.md new file mode 100644 index 0000000000..2b9702c273 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/get-collection.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +Collection result = await databases.GetCollection( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/get-document.md b/docs/examples/1.3.x/server-dotnet/examples/databases/get-document.md new file mode 100644 index 0000000000..7ceccde211 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/get-document.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +Document result = await databases.GetDocument( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + documentId: "[DOCUMENT_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/get-index.md b/docs/examples/1.3.x/server-dotnet/examples/databases/get-index.md new file mode 100644 index 0000000000..ed04b741e8 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/get-index.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +Index result = await databases.GetIndex( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: ""); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/get.md b/docs/examples/1.3.x/server-dotnet/examples/databases/get.md new file mode 100644 index 0000000000..975b00c3a3 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/get.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +Database result = await databases.Get( + databaseId: "[DATABASE_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/list-attributes.md b/docs/examples/1.3.x/server-dotnet/examples/databases/list-attributes.md new file mode 100644 index 0000000000..15c1c7548b --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/list-attributes.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeList result = await databases.ListAttributes( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/list-collections.md b/docs/examples/1.3.x/server-dotnet/examples/databases/list-collections.md new file mode 100644 index 0000000000..1e2e545402 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/list-collections.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +CollectionList result = await databases.ListCollections( + databaseId: "[DATABASE_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/list-documents.md b/docs/examples/1.3.x/server-dotnet/examples/databases/list-documents.md new file mode 100644 index 0000000000..0445238af2 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/list-documents.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +DocumentList result = await databases.ListDocuments( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/list-indexes.md b/docs/examples/1.3.x/server-dotnet/examples/databases/list-indexes.md new file mode 100644 index 0000000000..0505d19a1e --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/list-indexes.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +IndexList result = await databases.ListIndexes( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/list.md b/docs/examples/1.3.x/server-dotnet/examples/databases/list.md new file mode 100644 index 0000000000..baee085021 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/list.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +DatabaseList result = await databases.List(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-boolean-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-boolean-attribute.md new file mode 100644 index 0000000000..8e185d7357 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-boolean-attribute.md @@ -0,0 +1,16 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeBoolean result = await databases.UpdateBooleanAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false, + default: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-collection.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-collection.md new file mode 100644 index 0000000000..5744767340 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-collection.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +Collection result = await databases.UpdateCollection( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + name: "[NAME]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-datetime-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-datetime-attribute.md new file mode 100644 index 0000000000..6d02e2baa7 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-datetime-attribute.md @@ -0,0 +1,16 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeDatetime result = await databases.UpdateDatetimeAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false, + default: ""); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-document.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-document.md new file mode 100644 index 0000000000..48fee0d98d --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-document.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +Document result = await databases.UpdateDocument( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + documentId: "[DOCUMENT_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-email-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-email-attribute.md new file mode 100644 index 0000000000..066476029c --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-email-attribute.md @@ -0,0 +1,16 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeEmail result = await databases.UpdateEmailAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false, + default: "email@example.com"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-enum-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-enum-attribute.md new file mode 100644 index 0000000000..65362c0ca3 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-enum-attribute.md @@ -0,0 +1,17 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeEnum result = await databases.UpdateEnumAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + elements: new List {}, + required: false, + default: "[DEFAULT]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-float-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-float-attribute.md new file mode 100644 index 0000000000..2950bd0de1 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-float-attribute.md @@ -0,0 +1,18 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeFloat result = await databases.UpdateFloatAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false, + min: 0, + max: 0, + default: 0); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-integer-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-integer-attribute.md new file mode 100644 index 0000000000..880d1cc19a --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-integer-attribute.md @@ -0,0 +1,18 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeInteger result = await databases.UpdateIntegerAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false, + min: 0, + max: 0, + default: 0); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-ip-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-ip-attribute.md new file mode 100644 index 0000000000..70fd77392f --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-ip-attribute.md @@ -0,0 +1,16 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeIp result = await databases.UpdateIpAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false, + default: ""); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-relationship-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-relationship-attribute.md new file mode 100644 index 0000000000..e4917ef28c --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-relationship-attribute.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeRelationship result = await databases.UpdateRelationshipAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: ""); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-string-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-string-attribute.md new file mode 100644 index 0000000000..4744bf59df --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-string-attribute.md @@ -0,0 +1,16 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeString result = await databases.UpdateStringAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false, + default: "[DEFAULT]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update-url-attribute.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update-url-attribute.md new file mode 100644 index 0000000000..cb04a5dafe --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update-url-attribute.md @@ -0,0 +1,16 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +AttributeUrl result = await databases.UpdateUrlAttribute( + databaseId: "[DATABASE_ID]", + collectionId: "[COLLECTION_ID]", + key: "", + required: false, + default: "https://example.com"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/databases/update.md b/docs/examples/1.3.x/server-dotnet/examples/databases/update.md new file mode 100644 index 0000000000..db07b7a146 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/databases/update.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var databases = new Databases(client); + +Database result = await databases.Update( + databaseId: "[DATABASE_ID]", + name: "[NAME]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/create-build.md b/docs/examples/1.3.x/server-dotnet/examples/functions/create-build.md new file mode 100644 index 0000000000..6d62298b04 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/create-build.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + + result = await functions.CreateBuild( + functionId: "[FUNCTION_ID]", + deploymentId: "[DEPLOYMENT_ID]", + buildId: "[BUILD_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/create-deployment.md b/docs/examples/1.3.x/server-dotnet/examples/functions/create-deployment.md new file mode 100644 index 0000000000..98248508b6 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/create-deployment.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +Deployment result = await functions.CreateDeployment( + functionId: "[FUNCTION_ID]", + entrypoint: "[ENTRYPOINT]", + code: new File("./path-to-files/image.jpg"), + activate: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/create-execution.md b/docs/examples/1.3.x/server-dotnet/examples/functions/create-execution.md new file mode 100644 index 0000000000..9c015f8eb1 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/create-execution.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +Execution result = await functions.CreateExecution( + functionId: "[FUNCTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/create-variable.md b/docs/examples/1.3.x/server-dotnet/examples/functions/create-variable.md new file mode 100644 index 0000000000..e5df30deb5 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/create-variable.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +Variable result = await functions.CreateVariable( + functionId: "[FUNCTION_ID]", + key: "[KEY]", + value: "[VALUE]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/create.md b/docs/examples/1.3.x/server-dotnet/examples/functions/create.md new file mode 100644 index 0000000000..3f189b08e2 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/create.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +Function result = await functions.Create( + functionId: "[FUNCTION_ID]", + name: "[NAME]", + runtime: "node-14.5"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/delete-deployment.md b/docs/examples/1.3.x/server-dotnet/examples/functions/delete-deployment.md new file mode 100644 index 0000000000..f52515b5e1 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/delete-deployment.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +await functions.DeleteDeployment( + functionId: "[FUNCTION_ID]", + deploymentId: "[DEPLOYMENT_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/delete-variable.md b/docs/examples/1.3.x/server-dotnet/examples/functions/delete-variable.md new file mode 100644 index 0000000000..d9fb356fc6 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/delete-variable.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +await functions.DeleteVariable( + functionId: "[FUNCTION_ID]", + variableId: "[VARIABLE_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/delete.md b/docs/examples/1.3.x/server-dotnet/examples/functions/delete.md new file mode 100644 index 0000000000..265ebc361f --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/delete.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +await functions.Delete( + functionId: "[FUNCTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/get-deployment.md b/docs/examples/1.3.x/server-dotnet/examples/functions/get-deployment.md new file mode 100644 index 0000000000..65d8431634 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/get-deployment.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +Deployment result = await functions.GetDeployment( + functionId: "[FUNCTION_ID]", + deploymentId: "[DEPLOYMENT_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/get-execution.md b/docs/examples/1.3.x/server-dotnet/examples/functions/get-execution.md new file mode 100644 index 0000000000..f46f9d5dcd --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/get-execution.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +Execution result = await functions.GetExecution( + functionId: "[FUNCTION_ID]", + executionId: "[EXECUTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/get-variable.md b/docs/examples/1.3.x/server-dotnet/examples/functions/get-variable.md new file mode 100644 index 0000000000..a90ff4f32e --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/get-variable.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +Variable result = await functions.GetVariable( + functionId: "[FUNCTION_ID]", + variableId: "[VARIABLE_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/get.md b/docs/examples/1.3.x/server-dotnet/examples/functions/get.md new file mode 100644 index 0000000000..0cbec8a8e5 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/get.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +Function result = await functions.Get( + functionId: "[FUNCTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/list-deployments.md b/docs/examples/1.3.x/server-dotnet/examples/functions/list-deployments.md new file mode 100644 index 0000000000..d277204991 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/list-deployments.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +DeploymentList result = await functions.ListDeployments( + functionId: "[FUNCTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/list-executions.md b/docs/examples/1.3.x/server-dotnet/examples/functions/list-executions.md new file mode 100644 index 0000000000..0797af5b09 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/list-executions.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +ExecutionList result = await functions.ListExecutions( + functionId: "[FUNCTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/list-runtimes.md b/docs/examples/1.3.x/server-dotnet/examples/functions/list-runtimes.md new file mode 100644 index 0000000000..9f2edf4370 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/list-runtimes.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +RuntimeList result = await functions.ListRuntimes(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/list-variables.md b/docs/examples/1.3.x/server-dotnet/examples/functions/list-variables.md new file mode 100644 index 0000000000..f1336f651c --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/list-variables.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +VariableList result = await functions.ListVariables( + functionId: "[FUNCTION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/list.md b/docs/examples/1.3.x/server-dotnet/examples/functions/list.md new file mode 100644 index 0000000000..ba78467628 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/list.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +FunctionList result = await functions.List(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/update-deployment.md b/docs/examples/1.3.x/server-dotnet/examples/functions/update-deployment.md new file mode 100644 index 0000000000..1c8498fec0 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/update-deployment.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +Function result = await functions.UpdateDeployment( + functionId: "[FUNCTION_ID]", + deploymentId: "[DEPLOYMENT_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/update-variable.md b/docs/examples/1.3.x/server-dotnet/examples/functions/update-variable.md new file mode 100644 index 0000000000..ad60d979b1 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/update-variable.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +Variable result = await functions.UpdateVariable( + functionId: "[FUNCTION_ID]", + variableId: "[VARIABLE_ID]", + key: "[KEY]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/functions/update.md b/docs/examples/1.3.x/server-dotnet/examples/functions/update.md new file mode 100644 index 0000000000..02bfc73c0d --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/functions/update.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var functions = new Functions(client); + +Function result = await functions.Update( + functionId: "[FUNCTION_ID]", + name: "[NAME]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/graphql/mutation.md b/docs/examples/1.3.x/server-dotnet/examples/graphql/mutation.md new file mode 100644 index 0000000000..ba79658dd6 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/graphql/mutation.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var graphql = new Graphql(client); + +Any result = await graphql.Mutation( + query: [object]); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/graphql/query.md b/docs/examples/1.3.x/server-dotnet/examples/graphql/query.md new file mode 100644 index 0000000000..e271058e92 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/graphql/query.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var graphql = new Graphql(client); + +Any result = await graphql.Query( + query: [object]); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/health/get-antivirus.md b/docs/examples/1.3.x/server-dotnet/examples/health/get-antivirus.md new file mode 100644 index 0000000000..f133c3d707 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/health/get-antivirus.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var health = new Health(client); + +HealthAntivirus result = await health.GetAntivirus(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/health/get-cache.md b/docs/examples/1.3.x/server-dotnet/examples/health/get-cache.md new file mode 100644 index 0000000000..4c3b8273ce --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/health/get-cache.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var health = new Health(client); + +HealthStatus result = await health.GetCache(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/health/get-d-b.md b/docs/examples/1.3.x/server-dotnet/examples/health/get-d-b.md new file mode 100644 index 0000000000..d49218f60d --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/health/get-d-b.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var health = new Health(client); + +HealthStatus result = await health.GetDB(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-certificates.md b/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-certificates.md new file mode 100644 index 0000000000..4e4c042a12 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-certificates.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var health = new Health(client); + +HealthQueue result = await health.GetQueueCertificates(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-functions.md b/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-functions.md new file mode 100644 index 0000000000..1f120616d3 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-functions.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var health = new Health(client); + +HealthQueue result = await health.GetQueueFunctions(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-logs.md b/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-logs.md new file mode 100644 index 0000000000..68d6dac6a0 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-logs.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var health = new Health(client); + +HealthQueue result = await health.GetQueueLogs(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-webhooks.md b/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-webhooks.md new file mode 100644 index 0000000000..12fb20da1c --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/health/get-queue-webhooks.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var health = new Health(client); + +HealthQueue result = await health.GetQueueWebhooks(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/health/get-storage-local.md b/docs/examples/1.3.x/server-dotnet/examples/health/get-storage-local.md new file mode 100644 index 0000000000..3412c03e9d --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/health/get-storage-local.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var health = new Health(client); + +HealthStatus result = await health.GetStorageLocal(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/health/get-time.md b/docs/examples/1.3.x/server-dotnet/examples/health/get-time.md new file mode 100644 index 0000000000..d50d15b7ff --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/health/get-time.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var health = new Health(client); + +HealthTime result = await health.GetTime(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/health/get.md b/docs/examples/1.3.x/server-dotnet/examples/health/get.md new file mode 100644 index 0000000000..dac4a1260a --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/health/get.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var health = new Health(client); + +HealthStatus result = await health.Get(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/locale/get.md b/docs/examples/1.3.x/server-dotnet/examples/locale/get.md new file mode 100644 index 0000000000..da5866a83c --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/locale/get.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var locale = new Locale(client); + +Locale result = await locale.Get(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/locale/list-continents.md b/docs/examples/1.3.x/server-dotnet/examples/locale/list-continents.md new file mode 100644 index 0000000000..94f5dceeee --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/locale/list-continents.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var locale = new Locale(client); + +ContinentList result = await locale.ListContinents(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/locale/list-countries-e-u.md b/docs/examples/1.3.x/server-dotnet/examples/locale/list-countries-e-u.md new file mode 100644 index 0000000000..49bee6cf61 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/locale/list-countries-e-u.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var locale = new Locale(client); + +CountryList result = await locale.ListCountriesEU(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/locale/list-countries-phones.md b/docs/examples/1.3.x/server-dotnet/examples/locale/list-countries-phones.md new file mode 100644 index 0000000000..1a2b57879e --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/locale/list-countries-phones.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var locale = new Locale(client); + +PhoneList result = await locale.ListCountriesPhones(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/locale/list-countries.md b/docs/examples/1.3.x/server-dotnet/examples/locale/list-countries.md new file mode 100644 index 0000000000..4036ba3dd7 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/locale/list-countries.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var locale = new Locale(client); + +CountryList result = await locale.ListCountries(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/locale/list-currencies.md b/docs/examples/1.3.x/server-dotnet/examples/locale/list-currencies.md new file mode 100644 index 0000000000..338a7b48ba --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/locale/list-currencies.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var locale = new Locale(client); + +CurrencyList result = await locale.ListCurrencies(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/locale/list-languages.md b/docs/examples/1.3.x/server-dotnet/examples/locale/list-languages.md new file mode 100644 index 0000000000..ce75f8c681 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/locale/list-languages.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var locale = new Locale(client); + +LanguageList result = await locale.ListLanguages(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/create-bucket.md b/docs/examples/1.3.x/server-dotnet/examples/storage/create-bucket.md new file mode 100644 index 0000000000..ce3857f3f0 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/create-bucket.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +Bucket result = await storage.CreateBucket( + bucketId: "[BUCKET_ID]", + name: "[NAME]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/create-file.md b/docs/examples/1.3.x/server-dotnet/examples/storage/create-file.md new file mode 100644 index 0000000000..e177656fb5 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/create-file.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +File result = await storage.CreateFile( + bucketId: "[BUCKET_ID]", + fileId: "[FILE_ID]", + file: new File("./path-to-files/image.jpg")); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/delete-bucket.md b/docs/examples/1.3.x/server-dotnet/examples/storage/delete-bucket.md new file mode 100644 index 0000000000..bf2c393405 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/delete-bucket.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +await storage.DeleteBucket( + bucketId: "[BUCKET_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/delete-file.md b/docs/examples/1.3.x/server-dotnet/examples/storage/delete-file.md new file mode 100644 index 0000000000..c66b58179d --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/delete-file.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +await storage.DeleteFile( + bucketId: "[BUCKET_ID]", + fileId: "[FILE_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/get-bucket.md b/docs/examples/1.3.x/server-dotnet/examples/storage/get-bucket.md new file mode 100644 index 0000000000..37d6c21beb --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/get-bucket.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +Bucket result = await storage.GetBucket( + bucketId: "[BUCKET_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/get-file-download.md b/docs/examples/1.3.x/server-dotnet/examples/storage/get-file-download.md new file mode 100644 index 0000000000..690734731d --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/get-file-download.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +byte[] result = await storage.GetFileDownload( + bucketId: "[BUCKET_ID]", + fileId: "[FILE_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/get-file-preview.md b/docs/examples/1.3.x/server-dotnet/examples/storage/get-file-preview.md new file mode 100644 index 0000000000..8d63fc88a8 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/get-file-preview.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +byte[] result = await storage.GetFilePreview( + bucketId: "[BUCKET_ID]", + fileId: "[FILE_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/get-file-view.md b/docs/examples/1.3.x/server-dotnet/examples/storage/get-file-view.md new file mode 100644 index 0000000000..bdeb1b943c --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/get-file-view.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +byte[] result = await storage.GetFileView( + bucketId: "[BUCKET_ID]", + fileId: "[FILE_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/get-file.md b/docs/examples/1.3.x/server-dotnet/examples/storage/get-file.md new file mode 100644 index 0000000000..9b0c29ef3e --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/get-file.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +File result = await storage.GetFile( + bucketId: "[BUCKET_ID]", + fileId: "[FILE_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/list-buckets.md b/docs/examples/1.3.x/server-dotnet/examples/storage/list-buckets.md new file mode 100644 index 0000000000..869571ac7a --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/list-buckets.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +BucketList result = await storage.ListBuckets(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/list-files.md b/docs/examples/1.3.x/server-dotnet/examples/storage/list-files.md new file mode 100644 index 0000000000..70108256a1 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/list-files.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +FileList result = await storage.ListFiles( + bucketId: "[BUCKET_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/update-bucket.md b/docs/examples/1.3.x/server-dotnet/examples/storage/update-bucket.md new file mode 100644 index 0000000000..f05ca9c360 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/update-bucket.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +Bucket result = await storage.UpdateBucket( + bucketId: "[BUCKET_ID]", + name: "[NAME]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/storage/update-file.md b/docs/examples/1.3.x/server-dotnet/examples/storage/update-file.md new file mode 100644 index 0000000000..d2246ade1e --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/storage/update-file.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var storage = new Storage(client); + +File result = await storage.UpdateFile( + bucketId: "[BUCKET_ID]", + fileId: "[FILE_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/create-membership.md b/docs/examples/1.3.x/server-dotnet/examples/teams/create-membership.md new file mode 100644 index 0000000000..75abdfa7ef --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/create-membership.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var teams = new Teams(client); + +Membership result = await teams.CreateMembership( + teamId: "[TEAM_ID]", + roles: new List {}, + url: "https://example.com"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/create.md b/docs/examples/1.3.x/server-dotnet/examples/teams/create.md new file mode 100644 index 0000000000..bac3d727eb --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/create.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var teams = new Teams(client); + +Team result = await teams.Create( + teamId: "[TEAM_ID]", + name: "[NAME]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/delete-membership.md b/docs/examples/1.3.x/server-dotnet/examples/teams/delete-membership.md new file mode 100644 index 0000000000..60cb7ea216 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/delete-membership.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var teams = new Teams(client); + +await teams.DeleteMembership( + teamId: "[TEAM_ID]", + membershipId: "[MEMBERSHIP_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/delete.md b/docs/examples/1.3.x/server-dotnet/examples/teams/delete.md new file mode 100644 index 0000000000..2b72528cb0 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/delete.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var teams = new Teams(client); + +await teams.Delete( + teamId: "[TEAM_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/get-membership.md b/docs/examples/1.3.x/server-dotnet/examples/teams/get-membership.md new file mode 100644 index 0000000000..7873a24564 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/get-membership.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var teams = new Teams(client); + +Membership result = await teams.GetMembership( + teamId: "[TEAM_ID]", + membershipId: "[MEMBERSHIP_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/get-prefs.md b/docs/examples/1.3.x/server-dotnet/examples/teams/get-prefs.md new file mode 100644 index 0000000000..487461cb52 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/get-prefs.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var teams = new Teams(client); + +Preferences result = await teams.GetPrefs( + teamId: "[TEAM_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/get.md b/docs/examples/1.3.x/server-dotnet/examples/teams/get.md new file mode 100644 index 0000000000..32bebafbfc --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/get.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var teams = new Teams(client); + +Team result = await teams.Get( + teamId: "[TEAM_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/list-memberships.md b/docs/examples/1.3.x/server-dotnet/examples/teams/list-memberships.md new file mode 100644 index 0000000000..3ea7cb5acf --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/list-memberships.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var teams = new Teams(client); + +MembershipList result = await teams.ListMemberships( + teamId: "[TEAM_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/list.md b/docs/examples/1.3.x/server-dotnet/examples/teams/list.md new file mode 100644 index 0000000000..db4cd34fbe --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/list.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var teams = new Teams(client); + +TeamList result = await teams.List(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/update-membership-roles.md b/docs/examples/1.3.x/server-dotnet/examples/teams/update-membership-roles.md new file mode 100644 index 0000000000..1c2fada650 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/update-membership-roles.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var teams = new Teams(client); + +Membership result = await teams.UpdateMembershipRoles( + teamId: "[TEAM_ID]", + membershipId: "[MEMBERSHIP_ID]", + roles: new List {}); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/update-membership-status.md b/docs/examples/1.3.x/server-dotnet/examples/teams/update-membership-status.md new file mode 100644 index 0000000000..eaff766ac2 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/update-membership-status.md @@ -0,0 +1,15 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var teams = new Teams(client); + +Membership result = await teams.UpdateMembershipStatus( + teamId: "[TEAM_ID]", + membershipId: "[MEMBERSHIP_ID]", + userId: "[USER_ID]", + secret: "[SECRET]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/update-name.md b/docs/examples/1.3.x/server-dotnet/examples/teams/update-name.md new file mode 100644 index 0000000000..ca72222fc4 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/update-name.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var teams = new Teams(client); + +Team result = await teams.UpdateName( + teamId: "[TEAM_ID]", + name: "[NAME]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/teams/update-prefs.md b/docs/examples/1.3.x/server-dotnet/examples/teams/update-prefs.md new file mode 100644 index 0000000000..7a51248a98 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/teams/update-prefs.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetJWT("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."); // Your secret JSON Web Token + +var teams = new Teams(client); + +Preferences result = await teams.UpdatePrefs( + teamId: "[TEAM_ID]", + prefs: [object]); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/create-argon2user.md b/docs/examples/1.3.x/server-dotnet/examples/users/create-argon2user.md new file mode 100644 index 0000000000..5bd89a2686 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/create-argon2user.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.CreateArgon2User( + userId: "[USER_ID]", + email: "email@example.com", + password: "password"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/create-bcrypt-user.md b/docs/examples/1.3.x/server-dotnet/examples/users/create-bcrypt-user.md new file mode 100644 index 0000000000..aef0d9eab9 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/create-bcrypt-user.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.CreateBcryptUser( + userId: "[USER_ID]", + email: "email@example.com", + password: "password"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/create-m-d5user.md b/docs/examples/1.3.x/server-dotnet/examples/users/create-m-d5user.md new file mode 100644 index 0000000000..e537124143 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/create-m-d5user.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.CreateMD5User( + userId: "[USER_ID]", + email: "email@example.com", + password: "password"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/create-p-h-pass-user.md b/docs/examples/1.3.x/server-dotnet/examples/users/create-p-h-pass-user.md new file mode 100644 index 0000000000..f7a0d244e8 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/create-p-h-pass-user.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.CreatePHPassUser( + userId: "[USER_ID]", + email: "email@example.com", + password: "password"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/create-s-h-a-user.md b/docs/examples/1.3.x/server-dotnet/examples/users/create-s-h-a-user.md new file mode 100644 index 0000000000..c504ec7916 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/create-s-h-a-user.md @@ -0,0 +1,14 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.CreateSHAUser( + userId: "[USER_ID]", + email: "email@example.com", + password: "password"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/create-scrypt-modified-user.md b/docs/examples/1.3.x/server-dotnet/examples/users/create-scrypt-modified-user.md new file mode 100644 index 0000000000..af04bbccfc --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/create-scrypt-modified-user.md @@ -0,0 +1,17 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.CreateScryptModifiedUser( + userId: "[USER_ID]", + email: "email@example.com", + password: "password", + passwordSalt: "[PASSWORD_SALT]", + passwordSaltSeparator: "[PASSWORD_SALT_SEPARATOR]", + passwordSignerKey: "[PASSWORD_SIGNER_KEY]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/create-scrypt-user.md b/docs/examples/1.3.x/server-dotnet/examples/users/create-scrypt-user.md new file mode 100644 index 0000000000..3a95de571a --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/create-scrypt-user.md @@ -0,0 +1,19 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.CreateScryptUser( + userId: "[USER_ID]", + email: "email@example.com", + password: "password", + passwordSalt: "[PASSWORD_SALT]", + passwordCpu: 0, + passwordMemory: 0, + passwordParallel: 0, + passwordLength: 0); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/create.md b/docs/examples/1.3.x/server-dotnet/examples/users/create.md new file mode 100644 index 0000000000..2ed0671b34 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/create.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.Create( + userId: "[USER_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/delete-session.md b/docs/examples/1.3.x/server-dotnet/examples/users/delete-session.md new file mode 100644 index 0000000000..d656c670f2 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/delete-session.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +await users.DeleteSession( + userId: "[USER_ID]", + sessionId: "[SESSION_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/delete-sessions.md b/docs/examples/1.3.x/server-dotnet/examples/users/delete-sessions.md new file mode 100644 index 0000000000..ca15eb9d79 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/delete-sessions.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +await users.DeleteSessions( + userId: "[USER_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/delete.md b/docs/examples/1.3.x/server-dotnet/examples/users/delete.md new file mode 100644 index 0000000000..e3552fd2b6 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/delete.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +await users.Delete( + userId: "[USER_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/get-prefs.md b/docs/examples/1.3.x/server-dotnet/examples/users/get-prefs.md new file mode 100644 index 0000000000..695601b9b6 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/get-prefs.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +Preferences result = await users.GetPrefs( + userId: "[USER_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/get.md b/docs/examples/1.3.x/server-dotnet/examples/users/get.md new file mode 100644 index 0000000000..90411a6dde --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/get.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.Get( + userId: "[USER_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/list-logs.md b/docs/examples/1.3.x/server-dotnet/examples/users/list-logs.md new file mode 100644 index 0000000000..c42a767d75 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/list-logs.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +LogList result = await users.ListLogs( + userId: "[USER_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/list-memberships.md b/docs/examples/1.3.x/server-dotnet/examples/users/list-memberships.md new file mode 100644 index 0000000000..0a76062ace --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/list-memberships.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +MembershipList result = await users.ListMemberships( + userId: "[USER_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/list-sessions.md b/docs/examples/1.3.x/server-dotnet/examples/users/list-sessions.md new file mode 100644 index 0000000000..43fcb7a189 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/list-sessions.md @@ -0,0 +1,12 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +SessionList result = await users.ListSessions( + userId: "[USER_ID]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/list.md b/docs/examples/1.3.x/server-dotnet/examples/users/list.md new file mode 100644 index 0000000000..7bba5b7ecb --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/list.md @@ -0,0 +1,11 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +UserList result = await users.List(); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/update-email-verification.md b/docs/examples/1.3.x/server-dotnet/examples/users/update-email-verification.md new file mode 100644 index 0000000000..14d7a410b6 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/update-email-verification.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.UpdateEmailVerification( + userId: "[USER_ID]", + emailVerification: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/update-email.md b/docs/examples/1.3.x/server-dotnet/examples/users/update-email.md new file mode 100644 index 0000000000..dd2e1e3d39 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/update-email.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.UpdateEmail( + userId: "[USER_ID]", + email: "email@example.com"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/update-name.md b/docs/examples/1.3.x/server-dotnet/examples/users/update-name.md new file mode 100644 index 0000000000..01e3654c59 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/update-name.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.UpdateName( + userId: "[USER_ID]", + name: "[NAME]"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/update-password.md b/docs/examples/1.3.x/server-dotnet/examples/users/update-password.md new file mode 100644 index 0000000000..b8ad2c5906 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/update-password.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.UpdatePassword( + userId: "[USER_ID]", + password: ""); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/update-phone-verification.md b/docs/examples/1.3.x/server-dotnet/examples/users/update-phone-verification.md new file mode 100644 index 0000000000..afddc551ae --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/update-phone-verification.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.UpdatePhoneVerification( + userId: "[USER_ID]", + phoneVerification: false); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/update-phone.md b/docs/examples/1.3.x/server-dotnet/examples/users/update-phone.md new file mode 100644 index 0000000000..f556b734b4 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/update-phone.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.UpdatePhone( + userId: "[USER_ID]", + number: "+12065550100"); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/update-prefs.md b/docs/examples/1.3.x/server-dotnet/examples/users/update-prefs.md new file mode 100644 index 0000000000..8d3f10e17a --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/update-prefs.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +Preferences result = await users.UpdatePrefs( + userId: "[USER_ID]", + prefs: [object]); \ No newline at end of file diff --git a/docs/examples/1.3.x/server-dotnet/examples/users/update-status.md b/docs/examples/1.3.x/server-dotnet/examples/users/update-status.md new file mode 100644 index 0000000000..c2d1336223 --- /dev/null +++ b/docs/examples/1.3.x/server-dotnet/examples/users/update-status.md @@ -0,0 +1,13 @@ +using Appwrite; +using Appwrite.Models; + +var client = new Client() + .SetEndPoint("https://cloud.appwrite.io/v1") // Your API Endpoint + .SetProject("5df5acd0d48c2") // Your project ID + .SetKey("919c2d18fb5d4...a2ae413da83346ad2"); // Your secret API key + +var users = new Users(client); + +User result = await users.UpdateStatus( + userId: "[USER_ID]", + status: false); \ No newline at end of file diff --git a/docs/sdks/dotnet/GETTING_STARTED.md b/docs/sdks/dotnet/GETTING_STARTED.md index 23bab6f70a..bb6c67eebe 100644 --- a/docs/sdks/dotnet/GETTING_STARTED.md +++ b/docs/sdks/dotnet/GETTING_STARTED.md @@ -1,44 +1,42 @@ ## Getting Started ### Initialize & Make API Request -Once you add the dependencies, its extremely easy to get started with the SDK; All you need to do is import the package in your code, set your Appwrite credentials, and start making API calls. Below is a simple example: +Once you have installed the package, it is extremely easy to get started with the SDK; all you need to do is import the package in your code, set your Appwrite credentials, and start making API calls. Below is a simple example: ```csharp using Appwrite; -static async Task Main(string[] args) -{ - var client = Client(); +var client = new Client() + .SetEndpoint("http://cloud.appwrite.io/v1") // Make sure your endpoint is accessible + .SetProject("5ff3379a01d25") // Your project ID + .SetKey("cd868db89") // Your secret API key + .SetSelfSigned(); // Use only on dev mode with a self-signed SSL cert - client - .setEndpoint('http://[HOSTNAME_OR_IP]/v1') // Make sure your endpoint is accessible - .setProject('5ff3379a01d25') // Your project ID - .setKey('cd868c7af8bdc893b4...93b7535db89') - .setSelfSigned() // Use only on dev mode with a self-signed SSL cert - ; +var users = new Users(client); - var users = Users(client); +var user = await users.Create( + userId: ID.Unique(), + email: "email@example.com", + password: "password", + name: "name"); - try { - var user = await users.Create(ID.Unique(), 'email@example.com', 'password', 'name'); - Console.WriteLine(user.ToMap()); - } catch (AppwriteException e) { - Console.WriteLine(e.Message); - } -} +Console.WriteLine(user.ToMap()); ``` ### Error Handling -The Appwrite .NET SDK raises `AppwriteException` object with `message`, `code` and `response` properties. You can handle any errors by catching `AppwriteException` and present the `message` to the user or handle it yourself based on the provided error information. Below is an example. +The Appwrite .NET SDK raises an `AppwriteException` object with `message`, `code` and `response` properties. You can handle any errors by catching `AppwriteException` and present the `message` to the user or handle it yourself based on the provided error information. Below is an example. ```csharp -var users = Users(client); +var users = new Users(client); try { - var user = await users.Create(ID.Unique(), 'email@example.com', 'password', 'name'); - Console.WriteLine(user.ToMap()); + var user = await users.Create( + userId: ID.Unique(), + email: "email@example.com", + password: "password", + name: "name"); } catch (AppwriteException e) { - Console.WriteLine(e.Message); + Console.WriteLine(e.Message); } ``` diff --git a/src/Appwrite/Extend/Exception.php b/src/Appwrite/Extend/Exception.php index 07375ad83d..df99ff5812 100644 --- a/src/Appwrite/Extend/Exception.php +++ b/src/Appwrite/Extend/Exception.php @@ -135,6 +135,7 @@ class Exception extends \Exception /** Documents */ public const DOCUMENT_NOT_FOUND = 'document_not_found'; public const DOCUMENT_INVALID_STRUCTURE = 'document_invalid_structure'; + public const DOCUMENT_MISSING_DATA = 'document_missing_data'; public const DOCUMENT_MISSING_PAYLOAD = 'document_missing_payload'; public const DOCUMENT_ALREADY_EXISTS = 'document_already_exists'; public const DOCUMENT_UPDATE_CONFLICT = 'document_update_conflict'; @@ -161,6 +162,7 @@ class Exception extends \Exception public const PROJECT_UNKNOWN = 'project_unknown'; public const PROJECT_PROVIDER_DISABLED = 'project_provider_disabled'; public const PROJECT_PROVIDER_UNSUPPORTED = 'project_provider_unsupported'; + public const PROJECT_ALREADY_EXISTS = 'project_already_exists'; public const PROJECT_INVALID_SUCCESS_URL = 'project_invalid_success_url'; public const PROJECT_INVALID_FAILURE_URL = 'project_invalid_failure_url'; public const PROJECT_RESERVED_PROJECT = 'project_reserved_project'; diff --git a/src/Appwrite/Migration/Migration.php b/src/Appwrite/Migration/Migration.php index 397d41efdd..7a1f3cad24 100644 --- a/src/Appwrite/Migration/Migration.php +++ b/src/Appwrite/Migration/Migration.php @@ -60,6 +60,9 @@ abstract class Migration '1.3.2' => 'V18', '1.3.3' => 'V18', '1.3.4' => 'V18', + '1.3.5' => 'V18', + '1.3.6' => 'V18', + '1.3.7' => 'V18', ]; /** 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/Client.php b/tests/e2e/Client.php index e98472b2b8..21e4ccc958 100644 --- a/tests/e2e/Client.php +++ b/tests/e2e/Client.php @@ -160,35 +160,21 @@ class Client * @param array $params * @param array $headers * @param bool $decode - * @return array|string + * @return array * @throws Exception */ - public function call(string $method, string $path = '', array $headers = [], array $params = [], bool $decode = true) + public function call(string $method, string $path = '', array $headers = [], array $params = [], bool $decode = true): array { $headers = array_merge($this->headers, $headers); $ch = curl_init($this->endpoint . $path . (($method == self::METHOD_GET && !empty($params)) ? '?' . http_build_query($params) : '')); $responseHeaders = []; - $responseStatus = -1; - $responseType = ''; - $responseBody = ''; - switch ($headers['content-type']) { - case 'application/json': - $query = json_encode($params); - break; - - case 'multipart/form-data': - $query = $this->flatten($params); - break; - - case 'application/graphql': - $query = $params[0]; - break; - - default: - $query = http_build_query($params); - break; - } + $query = match ($headers['content-type']) { + 'application/json' => json_encode($params), + 'multipart/form-data' => $this->flatten($params), + 'application/graphql' => $params[0], + default => http_build_query($params), + }; foreach ($headers as $i => $header) { $headers[] = $i . ':' . $header; @@ -220,7 +206,7 @@ class Client curl_setopt($ch, CURLOPT_POSTFIELDS, $query); } - // Allow self signed certificates + // Allow self-signed certificates if ($this->selfSigned) { curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); @@ -230,22 +216,18 @@ class Client $responseType = $responseHeaders['content-type'] ?? ''; $responseStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE); - if ($decode) { - switch (substr($responseType, 0, strpos($responseType, ';'))) { - case 'application/json': - $json = json_decode($responseBody, true); + if ($decode && substr($responseType, 0, strpos($responseType, ';')) == 'application/json') { + $json = json_decode($responseBody, true); - if ($json === null) { - throw new Exception('Failed to parse response: ' . $responseBody); - } - - $responseBody = $json; - $json = null; - break; + if ($json === null) { + throw new Exception('Failed to parse response: ' . $responseBody); } + + $responseBody = $json; + $json = null; } - if ((curl_errno($ch)/* || 200 != $responseStatus*/)) { + if ((curl_errno($ch))) { throw new Exception(curl_error($ch) . ' with status code ' . $responseStatus, $responseStatus); } @@ -273,7 +255,7 @@ class Client { $cookies = []; - parse_str(strtr($cookie, array('&' => '%26', '+' => '%2B', ';' => '&')), $cookies); + parse_str(strtr($cookie, ['&' => '%26', '+' => '%2B', ';' => '&']), $cookies); return $cookies; } diff --git a/tests/e2e/General/HTTPTest.php b/tests/e2e/General/HTTPTest.php index f033cd6d42..087b984f9d 100644 --- a/tests/e2e/General/HTTPTest.php +++ b/tests/e2e/General/HTTPTest.php @@ -12,6 +12,12 @@ class HTTPTest extends Scope use ProjectNone; use SideNone; + public function setUp(): void + { + parent::setUp(); + $this->client->setEndpoint('http://localhost'); + } + public function testOptions() { /** @@ -32,24 +38,6 @@ class HTTPTest extends Scope $this->assertEmpty($response['body']); } - public function testError() - { - /** - * Test for SUCCESS - */ - $this->markTestIncomplete('This test needs to be updated for the new console.'); - // $response = $this->client->call(Client::METHOD_GET, '/error', \array_merge([ - // 'origin' => 'http://localhost', - // 'content-type' => 'application/json', - // ]), []); - - // $this->assertEquals(404, $response['headers']['status-code']); - // $this->assertEquals('Not Found', $response['body']['message']); - // $this->assertEquals(Exception::GENERAL_ROUTE_NOT_FOUND, $response['body']['type']); - // $this->assertEquals(404, $response['body']['code']); - // $this->assertEquals('dev', $response['body']['version']); - } - public function testHumans() { /** @@ -57,7 +45,7 @@ class HTTPTest extends Scope */ $response = $this->client->call(Client::METHOD_GET, '/humans.txt', \array_merge([ 'origin' => 'http://localhost', - ]), []); + ])); $this->assertEquals(200, $response['headers']['status-code']); $this->assertStringContainsString('# humanstxt.org/', $response['body']); @@ -70,7 +58,7 @@ class HTTPTest extends Scope */ $response = $this->client->call(Client::METHOD_GET, '/robots.txt', \array_merge([ 'origin' => 'http://localhost', - ]), []); + ])); $this->assertEquals(200, $response['headers']['status-code']); $this->assertStringContainsString('# robotstxt.org/', $response['body']); @@ -87,18 +75,19 @@ class HTTPTest extends Scope */ $response = $this->client->call(Client::METHOD_GET, '/.well-known/acme-challenge/8DdIKX257k6Dih5s_saeVMpTnjPJdKO5Ase0OCiJrIg', \array_merge([ 'origin' => 'http://localhost', - ]), []); + ])); - $this->assertEquals(404, $response['headers']['status-code']); // 'Unknown path', but validation passed + $this->assertEquals(404, $response['headers']['status-code']); /** * Test for FAILURE */ $response = $this->client->call(Client::METHOD_GET, '/.well-known/acme-challenge/../../../../../../../etc/passwd', \array_merge([ 'origin' => 'http://localhost', - ]), []); + ])); + // Check for too many path segments $this->assertEquals(400, $response['headers']['status-code']); // Cleanup @@ -171,4 +160,15 @@ class HTTPTest extends Scope $this->assertIsString($body['server-ruby']); $this->assertIsString($body['console-cli']); } + + public function testDefaultOAuth2() + { + $response = $this->client->call(Client::METHOD_GET, '/auth/oauth2/success', $this->getHeaders()); + + $this->assertEquals(200, $response['headers']['status-code']); + + $response = $this->client->call(Client::METHOD_GET, '/auth/oauth2/failure', $this->getHeaders()); + + $this->assertEquals(200, $response['headers']['status-code']); + } } diff --git a/tests/e2e/Scopes/Scope.php b/tests/e2e/Scopes/Scope.php index 42057e8e94..14eb83897b 100644 --- a/tests/e2e/Scopes/Scope.php +++ b/tests/e2e/Scopes/Scope.php @@ -17,10 +17,7 @@ abstract class Scope extends TestCase protected function setUp(): void { $this->client = new Client(); - - $this->client - ->setEndpoint($this->endpoint) - ; + $this->client->setEndpoint($this->endpoint); } protected function tearDown(): void @@ -45,10 +42,10 @@ abstract class Scope extends TestCase { sleep(2); - $resquest = json_decode(file_get_contents('http://request-catcher:5000/__last_request__'), true); - $resquest['data'] = json_decode($resquest['data'], true); + $request = json_decode(file_get_contents('http://request-catcher:5000/__last_request__'), true); + $request['data'] = json_decode($request['data'], true); - return $resquest; + return $request; } /** diff --git a/tests/e2e/Services/Account/AccountCustomClientTest.php b/tests/e2e/Services/Account/AccountCustomClientTest.php index 6f75a998c1..c0435762fe 100644 --- a/tests/e2e/Services/Account/AccountCustomClientTest.php +++ b/tests/e2e/Services/Account/AccountCustomClientTest.php @@ -225,6 +225,8 @@ class AccountCustomClientTest extends Scope ]); $this->assertEquals($response['headers']['status-code'], 200); + $this->assertStringContainsString('a_session_' . $this->getProject()['$id'] . '=deleted', $response['headers']['set-cookie']); + $this->assertEquals('[]', $response['headers']['x-fallback-cookies']); $response = $this->client->call(Client::METHOD_GET, '/account', array_merge([ 'origin' => 'http://localhost', diff --git a/tests/e2e/Services/Databases/DatabasesBase.php b/tests/e2e/Services/Databases/DatabasesBase.php index 0648db849e..144adfb989 100644 --- a/tests/e2e/Services/Databases/DatabasesBase.php +++ b/tests/e2e/Services/Databases/DatabasesBase.php @@ -157,6 +157,7 @@ trait DatabasesBase public function testCreateAttributes(array $data): array { $databaseId = $data['databaseId']; + $title = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/attributes/string', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], @@ -167,6 +168,17 @@ trait DatabasesBase 'required' => true, ]); + $description = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/attributes/string', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'] + ]), [ + 'key' => 'description', + 'size' => 256, + 'required' => false, + 'default' => '', + ]); + $releaseYear = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/attributes/integer', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], @@ -226,6 +238,13 @@ trait DatabasesBase $this->assertEquals($title['body']['size'], 256); $this->assertEquals($title['body']['required'], true); + $this->assertEquals(202, $description['headers']['status-code']); + $this->assertEquals($description['body']['key'], 'description'); + $this->assertEquals($description['body']['type'], 'string'); + $this->assertEquals($description['body']['size'], 256); + $this->assertEquals($description['body']['required'], false); + $this->assertEquals($description['body']['default'], ''); + $this->assertEquals(202, $releaseYear['headers']['status-code']); $this->assertEquals($releaseYear['body']['key'], 'releaseYear'); $this->assertEquals($releaseYear['body']['type'], 'integer'); @@ -266,13 +285,14 @@ trait DatabasesBase ]), []); $this->assertIsArray($movies['body']['attributes']); - $this->assertCount(6, $movies['body']['attributes']); + $this->assertCount(7, $movies['body']['attributes']); $this->assertEquals($movies['body']['attributes'][0]['key'], $title['body']['key']); - $this->assertEquals($movies['body']['attributes'][1]['key'], $releaseYear['body']['key']); - $this->assertEquals($movies['body']['attributes'][2]['key'], $duration['body']['key']); - $this->assertEquals($movies['body']['attributes'][3]['key'], $actors['body']['key']); - $this->assertEquals($movies['body']['attributes'][4]['key'], $datetime['body']['key']); - $this->assertEquals($movies['body']['attributes'][5]['key'], $relationship['body']['key']); + $this->assertEquals($movies['body']['attributes'][1]['key'], $description['body']['key']); + $this->assertEquals($movies['body']['attributes'][2]['key'], $releaseYear['body']['key']); + $this->assertEquals($movies['body']['attributes'][3]['key'], $duration['body']['key']); + $this->assertEquals($movies['body']['attributes'][4]['key'], $actors['body']['key']); + $this->assertEquals($movies['body']['attributes'][5]['key'], $datetime['body']['key']); + $this->assertEquals($movies['body']['attributes'][6]['key'], $relationship['body']['key']); return $data; } @@ -1086,6 +1106,12 @@ trait DatabasesBase $this->assertEquals(400, $document4['headers']['status-code']); + // Delete document 4 with incomplete path + $this->assertEquals(404, $this->client->call(Client::METHOD_DELETE, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/documents/', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()))['headers']['status-code']); + return $data; } @@ -3047,7 +3073,7 @@ trait DatabasesBase $databaseId = $database['body']['$id']; // Create collection - $movies = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/', array_merge([ + $movies = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], 'x-appwrite-key' => $this->getProject()['apiKey'] diff --git a/tests/e2e/Services/Databases/DatabasesConsoleClientTest.php b/tests/e2e/Services/Databases/DatabasesConsoleClientTest.php index ad97a2bb3e..13d28df5f3 100644 --- a/tests/e2e/Services/Databases/DatabasesConsoleClientTest.php +++ b/tests/e2e/Services/Databases/DatabasesConsoleClientTest.php @@ -20,13 +20,13 @@ class DatabasesConsoleClientTest extends Scope $database = $this->client->call(Client::METHOD_POST, '/databases', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], - 'x-appwrite-key' => $this->getProject()['apiKey'] - ]), [ + ], $this->getHeaders()), [ 'databaseId' => ID::unique(), 'name' => 'invalidDocumentDatabase', ]); $this->assertEquals(201, $database['headers']['status-code']); $this->assertEquals('invalidDocumentDatabase', $database['body']['name']); + $this->assertTrue($database['body']['enabled']); $databaseId = $database['body']['$id']; /** @@ -50,7 +50,129 @@ class DatabasesConsoleClientTest extends Scope $this->assertEquals(201, $movies['headers']['status-code']); $this->assertEquals($movies['body']['name'], 'Movies'); - return ['moviesId' => $movies['body']['$id'], 'databaseId' => $databaseId]; + /** + * Test When database is disabled but can still create collections + */ + $database = $this->client->call(Client::METHOD_PUT, '/databases/' . $databaseId, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'name' => 'invalidDocumentDatabase Updated', + 'enabled' => false, + ]); + + $this->assertFalse($database['body']['enabled']); + + $tvShows = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'collectionId' => ID::unique(), + 'name' => 'TvShows', + 'permissions' => [ + Permission::read(Role::any()), + Permission::create(Role::any()), + Permission::update(Role::any()), + Permission::delete(Role::any()), + ], + 'documentSecurity' => true, + ]); + + $this->assertEquals(201, $tvShows['headers']['status-code']); + $this->assertEquals($tvShows['body']['name'], 'TvShows'); + + return ['moviesId' => $movies['body']['$id'], 'databaseId' => $databaseId, 'tvShowsId' => $tvShows['body']['$id']]; + } + + /** + * @depends testCreateCollection + * @param array $data + */ + public function testListCollection(array $data) + { + /** + * Test When database is disabled but can still call list collections + */ + $databaseId = $data['databaseId']; + + $collections = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'] + ], $this->getHeaders())); + + $this->assertEquals(200, $collections['headers']['status-code']); + $this->assertEquals(2, $collections['body']['total']); + } + + /** + * @depends testCreateCollection + * @param array $data + */ + public function testGetCollection(array $data) + { + $databaseId = $data['databaseId']; + $moviesCollectionId = $data['moviesId']; + + /** + * Test When database is disabled but can still call get collection + */ + $collection = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $moviesCollectionId, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); + + $this->assertEquals(200, $collection['headers']['status-code']); + $this->assertEquals('Movies', $collection['body']['name']); + $this->assertEquals($moviesCollectionId, $collection['body']['$id']); + $this->assertTrue($collection['body']['enabled']); + } + + /** + * @depends testCreateCollection + * @param array $data + */ + public function testUpdateCollection(array $data) + { + $databaseId = $data['databaseId']; + $moviesCollectionId = $data['moviesId']; + + /** + * Test When database is disabled but can still call update collection + */ + $collection = $this->client->call(Client::METHOD_PUT, '/databases/' . $databaseId . '/collections/' . $moviesCollectionId, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'name' => 'Movies Updated', + 'enabled' => false + ]); + + $this->assertEquals(200, $collection['headers']['status-code']); + $this->assertEquals('Movies Updated', $collection['body']['name']); + $this->assertEquals($moviesCollectionId, $collection['body']['$id']); + $this->assertFalse($collection['body']['enabled']); + } + + /** + * @depends testCreateCollection + * @param array $data + */ + public function testDeleteCollection(array $data) + { + $databaseId = $data['databaseId']; + $tvShowsId = $data['tvShowsId']; + + /** + * Test When database is disabled but can still call Delete collection + */ + $response = $this->client->call(Client::METHOD_DELETE, '/databases/' . $databaseId . '/collections/' . $tvShowsId, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); + + $this->assertEquals(204, $response['headers']['status-code']); + $this->assertEquals($response['body'], ""); } /** diff --git a/tests/e2e/Services/Databases/DatabasesCustomServerTest.php b/tests/e2e/Services/Databases/DatabasesCustomServerTest.php index ce6602c176..5e734fbcb2 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']); @@ -56,7 +57,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'limit(1)' ], + 'queries' => ['limit(1)'], ]); $this->assertEquals(200, $databases['headers']['status-code']); $this->assertCount(1, $databases['body']['databases']); @@ -65,7 +66,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'offset(1)' ], + 'queries' => ['offset(1)'], ]); $this->assertEquals(200, $databases['headers']['status-code']); $this->assertCount(1, $databases['body']['databases']); @@ -74,7 +75,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'equal("name", ["Test 1", "Test 2"])' ], + 'queries' => ['equal("name", ["Test 1", "Test 2"])'], ]); $this->assertEquals(200, $databases['headers']['status-code']); $this->assertCount(2, $databases['body']['databases']); @@ -83,7 +84,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'equal("name", "Test 2")' ], + 'queries' => ['equal("name", "Test 2")'], ]); $this->assertEquals(200, $databases['headers']['status-code']); $this->assertCount(1, $databases['body']['databases']); @@ -92,7 +93,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'equal("$id", "first")' ], + 'queries' => ['equal("$id", "first")'], ]); $this->assertEquals(200, $databases['headers']['status-code']); $this->assertCount(1, $databases['body']['databases']); @@ -104,7 +105,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'orderDesc("")' ], + 'queries' => ['orderDesc("")'], ]); $this->assertEquals(2, $databases['body']['total']); @@ -123,7 +124,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'cursorAfter("' . $base['body']['databases'][0]['$id'] . '")' ], + 'queries' => ['cursorAfter("' . $base['body']['databases'][0]['$id'] . '")'], ]); $this->assertCount(1, $databases['body']['databases']); @@ -133,7 +134,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'cursorAfter("' . $base['body']['databases'][1]['$id'] . '")' ], + 'queries' => ['cursorAfter("' . $base['body']['databases'][1]['$id'] . '")'], ]); $this->assertCount(0, $databases['body']['databases']); @@ -151,7 +152,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'cursorBefore("' . $base['body']['databases'][1]['$id'] . '")' ], + 'queries' => ['cursorBefore("' . $base['body']['databases'][1]['$id'] . '")'], ]); $this->assertCount(1, $databases['body']['databases']); @@ -161,7 +162,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'cursorBefore("' . $base['body']['databases'][0]['$id'] . '")' ], + 'queries' => ['cursorBefore("' . $base['body']['databases'][0]['$id'] . '")'], ]); $this->assertCount(0, $databases['body']['databases']); @@ -207,7 +208,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'cursorAfter("unknown")' ], + 'queries' => ['cursorAfter("unknown")'], ]); $this->assertEquals(400, $response['headers']['status-code']); @@ -244,10 +245,44 @@ 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']]; } + /** + * @depends testListDatabases + */ + public function testUpdateDatabase(array $data) + { + $databaseId = $data['databaseId']; + + $database = $this->client->call(Client::METHOD_PUT, '/databases/' . $databaseId, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'] + ], [ + 'name' => 'Test 1 Updated', + 'enabled' => false, + ]); + + $this->assertEquals(200, $database['headers']['status-code']); + $this->assertEquals('Test 1 Updated', $database['body']['name']); + $this->assertFalse($database['body']['enabled']); + + // Now update the database without the passing the enabled parameter + $database = $this->client->call(Client::METHOD_PUT, '/databases/' . $databaseId, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'] + ], [ + 'name' => 'Test 1' + ]); + + $this->assertEquals(200, $database['headers']['status-code']); + $this->assertEquals('Test 1', $database['body']['name']); + $this->assertTrue($database['body']['enabled']); + } + /** * @depends testListDatabases */ @@ -273,7 +308,7 @@ class DatabasesCustomServerTest extends Scope $this->assertEquals(404, $response['headers']['status-code']); } - public function testListCollections() + public function testListCollections(): array { $database = $this->client->call(Client::METHOD_POST, '/databases', array_merge([ 'content-type' => 'application/json', @@ -285,6 +320,7 @@ class DatabasesCustomServerTest extends Scope ]); $this->assertEquals(201, $database['headers']['status-code']); $this->assertEquals('invalidDocumentDatabase', $database['body']['name']); + $this->assertTrue($database['body']['enabled']); $databaseId = $database['body']['$id']; /** @@ -329,7 +365,9 @@ class DatabasesCustomServerTest extends Scope $this->assertEquals(2, $collections['body']['total']); $this->assertEquals($test1['body']['$id'], $collections['body']['collections'][0]['$id']); + $this->assertEquals($test1['body']['enabled'], $collections['body']['collections'][0]['enabled']); $this->assertEquals($test2['body']['$id'], $collections['body']['collections'][1]['$id']); + $this->assertEquals($test1['body']['enabled'], $collections['body']['collections'][0]['enabled']); $base = array_reverse($collections['body']['collections']); @@ -337,7 +375,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'limit(1)' ] + 'queries' => ['limit(1)'] ]); $this->assertEquals(200, $collections['headers']['status-code']); @@ -347,7 +385,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'offset(1)' ] + 'queries' => ['offset(1)'] ]); $this->assertEquals(200, $collections['headers']['status-code']); @@ -357,7 +395,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'equal("enabled", true)' ] + 'queries' => ['equal("enabled", true)'] ]); $this->assertEquals(200, $collections['headers']['status-code']); @@ -367,7 +405,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'equal("enabled", false)' ] + 'queries' => ['equal("enabled", false)'] ]); $this->assertEquals(200, $collections['headers']['status-code']); @@ -380,7 +418,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'orderDesc("")' ], + 'queries' => ['orderDesc("")'], ]); $this->assertEquals(2, $collections['body']['total']); @@ -399,7 +437,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'cursorAfter("' . $base['body']['collections'][0]['$id'] . '")' ], + 'queries' => ['cursorAfter("' . $base['body']['collections'][0]['$id'] . '")'], ]); $this->assertCount(1, $collections['body']['collections']); @@ -409,7 +447,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'cursorAfter("' . $base['body']['collections'][1]['$id'] . '")' ], + 'queries' => ['cursorAfter("' . $base['body']['collections'][1]['$id'] . '")'], ]); $this->assertCount(0, $collections['body']['collections']); @@ -427,7 +465,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'cursorBefore("' . $base['body']['collections'][1]['$id'] . '")' ], + 'queries' => ['cursorBefore("' . $base['body']['collections'][1]['$id'] . '")'], ]); $this->assertCount(1, $collections['body']['collections']); @@ -437,7 +475,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'cursorBefore("' . $base['body']['collections'][0]['$id'] . '")' ], + 'queries' => ['cursorBefore("' . $base['body']['collections'][0]['$id'] . '")'], ]); $this->assertCount(0, $collections['body']['collections']); @@ -483,7 +521,7 @@ class DatabasesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => [ 'cursorAfter("unknown")' ], + 'queries' => ['cursorAfter("unknown")'], ]); $this->assertEquals(400, $response['headers']['status-code']); @@ -506,6 +544,53 @@ class DatabasesCustomServerTest extends Scope ]); $this->assertEquals(409, $response['headers']['status-code']); + return [ + 'databaseId' => $databaseId, + 'collectionId' => $test1['body']['$id'], + ]; + } + + /** + * @depends testListCollections + */ + public function testGetCollection(array $data): void + { + $databaseId = $data['databaseId']; + $collectionId = $data['collectionId']; + + $collection = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $collectionId, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'] + ], $this->getHeaders())); + + $this->assertEquals(200, $collection['headers']['status-code']); + $this->assertEquals('Test 1', $collection['body']['name']); + $this->assertEquals('first', $collection['body']['$id']); + $this->assertTrue($collection['body']['enabled']); + } + + /** + * @depends testListCollections + */ + public function testUpdateCollection(array $data) + { + $databaseId = $data['databaseId']; + $collectionId = $data['collectionId']; + + $collection = $this->client->call(Client::METHOD_PUT, '/databases/' . $databaseId . '/collections/' . $collectionId, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'] + ]), [ + 'name' => 'Test 1 Updated', + 'enabled' => false + ]); + + $this->assertEquals(200, $collection['headers']['status-code']); + $this->assertEquals('Test 1 Updated', $collection['body']['name']); + $this->assertEquals('first', $collection['body']['$id']); + $this->assertFalse($collection['body']['enabled']); } public function testDeleteAttribute(): array @@ -589,7 +674,7 @@ class DatabasesCustomServerTest extends Scope 'data' => [ 'firstName' => 'lorem', 'lastName' => 'ipsum', - 'unneeded' => 'dolor' + 'unneeded' => 'dolor' ], 'permissions' => [ Permission::read(Role::any()), @@ -1432,7 +1517,7 @@ class DatabasesCustomServerTest extends Scope 'x-appwrite-key' => $this->getProject()['apiKey'] ])); - $attribute = array_values(array_filter($new['body']['attributes'], fn (array $a) => $a['key'] === $key))[0] ?? null; + $attribute = array_values(array_filter($new['body']['attributes'], fn(array $a) => $a['key'] === $key))[0] ?? null; $this->assertNotNull($attribute); $this->assertFalse($attribute['required']); $this->assertEquals('lorem', $attribute['default']); @@ -1574,7 +1659,7 @@ class DatabasesCustomServerTest extends Scope 'x-appwrite-key' => $this->getProject()['apiKey'] ])); - $attribute = array_values(array_filter($new['body']['attributes'], fn (array $a) => $a['key'] === $key))[0] ?? null; + $attribute = array_values(array_filter($new['body']['attributes'], fn(array $a) => $a['key'] === $key))[0] ?? null; $this->assertNotNull($attribute); $this->assertFalse($attribute['required']); $this->assertEquals('torsten@appwrite.io', $attribute['default']); @@ -1717,7 +1802,7 @@ class DatabasesCustomServerTest extends Scope 'x-appwrite-key' => $this->getProject()['apiKey'] ])); - $attribute = array_values(array_filter($new['body']['attributes'], fn (array $a) => $a['key'] === $key))[0] ?? null; + $attribute = array_values(array_filter($new['body']['attributes'], fn(array $a) => $a['key'] === $key))[0] ?? null; $this->assertNotNull($attribute); $this->assertFalse($attribute['required']); $this->assertEquals('127.0.0.1', $attribute['default']); @@ -1859,7 +1944,7 @@ class DatabasesCustomServerTest extends Scope 'x-appwrite-key' => $this->getProject()['apiKey'] ])); - $attribute = array_values(array_filter($new['body']['attributes'], fn (array $a) => $a['key'] === $key))[0] ?? null; + $attribute = array_values(array_filter($new['body']['attributes'], fn(array $a) => $a['key'] === $key))[0] ?? null; $this->assertNotNull($attribute); $this->assertFalse($attribute['required']); $this->assertEquals('http://appwrite.io', $attribute['default']); @@ -2005,7 +2090,7 @@ class DatabasesCustomServerTest extends Scope 'x-appwrite-key' => $this->getProject()['apiKey'] ])); - $attribute = array_values(array_filter($new['body']['attributes'], fn (array $a) => $a['key'] === $key))[0] ?? null; + $attribute = array_values(array_filter($new['body']['attributes'], fn(array $a) => $a['key'] === $key))[0] ?? null; $this->assertNotNull($attribute); $this->assertFalse($attribute['required']); $this->assertEquals(123, $attribute['default']); @@ -2268,7 +2353,7 @@ class DatabasesCustomServerTest extends Scope 'x-appwrite-key' => $this->getProject()['apiKey'] ])); - $attribute = array_values(array_filter($new['body']['attributes'], fn (array $a) => $a['key'] === $key))[0] ?? null; + $attribute = array_values(array_filter($new['body']['attributes'], fn(array $a) => $a['key'] === $key))[0] ?? null; $this->assertNotNull($attribute); $this->assertFalse($attribute['required']); $this->assertEquals(123.456, $attribute['default']); @@ -2527,7 +2612,7 @@ class DatabasesCustomServerTest extends Scope 'x-appwrite-key' => $this->getProject()['apiKey'] ])); - $attribute = array_values(array_filter($new['body']['attributes'], fn (array $a) => $a['key'] === $key))[0] ?? null; + $attribute = array_values(array_filter($new['body']['attributes'], fn(array $a) => $a['key'] === $key))[0] ?? null; $this->assertNotNull($attribute); $this->assertFalse($attribute['required']); $this->assertEquals(true, $attribute['default']); @@ -2669,7 +2754,7 @@ class DatabasesCustomServerTest extends Scope 'x-appwrite-key' => $this->getProject()['apiKey'] ])); - $attribute = array_values(array_filter($new['body']['attributes'], fn (array $a) => $a['key'] === $key))[0] ?? null; + $attribute = array_values(array_filter($new['body']['attributes'], fn(array $a) => $a['key'] === $key))[0] ?? null; $this->assertNotNull($attribute); $this->assertFalse($attribute['required']); $this->assertEquals('1975-06-12 14:12:55+02:00', $attribute['default']); @@ -2816,7 +2901,7 @@ class DatabasesCustomServerTest extends Scope 'x-appwrite-key' => $this->getProject()['apiKey'] ])); - $attribute = array_values(array_filter($new['body']['attributes'], fn (array $a) => $a['key'] === $key))[0] ?? null; + $attribute = array_values(array_filter($new['body']['attributes'], fn(array $a) => $a['key'] === $key))[0] ?? null; $this->assertNotNull($attribute); $this->assertFalse($attribute['required']); $this->assertEquals('lorem', $attribute['default']); diff --git a/tests/e2e/Services/GraphQL/StorageServerTest.php b/tests/e2e/Services/GraphQL/StorageServerTest.php index afaef08321..7fea895b1c 100644 --- a/tests/e2e/Services/GraphQL/StorageServerTest.php +++ b/tests/e2e/Services/GraphQL/StorageServerTest.php @@ -77,7 +77,7 @@ class StorageServerTest extends Scope 'file' => new CURLFile(realpath(__DIR__ . '/../../../resources/logo.png'), 'image/png', 'logo.png'), ]; - $file = $this->client->call(Client::METHOD_POST, '/graphql/upload', \array_merge([ + $file = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([ 'content-type' => 'multipart/form-data', 'x-appwrite-project' => $projectId, ], $this->getHeaders()), $gqlPayload); diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 91699f2dba..b104b49904 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -3,6 +3,7 @@ namespace Tests\E2E\Services\Projects; use Appwrite\Auth\Auth; +use Appwrite\Extend\Exception; use Tests\E2E\Scopes\Scope; use Tests\E2E\Scopes\ProjectConsole; use Tests\E2E\Scopes\SideClient; @@ -98,7 +99,37 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(400, $response['headers']['status-code']); - return ['projectId' => $projectId]; + return [ + 'projectId' => $projectId, + 'teamId' => $team['body']['$id'] + ]; + } + + /** + * @depends testCreateProject + */ + public function testCreateDuplicateProject($data) + { + $teamId = $data['teamId'] ?? ''; + $projectId = $data['projectId'] ?? ''; + + /** + * Test for FAILURE + */ + $response = $this->client->call(Client::METHOD_POST, '/projects', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'projectId' => $projectId, + 'name' => 'Project Duplicate', + 'teamId' => $teamId, + 'region' => 'default' + ]); + + $this->assertEquals(409, $response['headers']['status-code']); + $this->assertEquals(409, $response['body']['code']); + $this->assertEquals(Exception::PROJECT_ALREADY_EXISTS, $response['body']['type']); + $this->assertEquals('Project with the requested ID already exists.', $response['body']['message']); } /** @@ -783,11 +814,11 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals($response['headers']['status-code'], 501); - $response = $this->client->call(Client::METHOD_POST, '/account/anonymous', array_merge([ + $response = $this->client->call(Client::METHOD_POST, '/account/sessions/anonymous', array_merge([ 'origin' => 'http://localhost', 'content-type' => 'application/json', 'x-appwrite-project' => $id, - ]), []); + ])); $this->assertEquals($response['headers']['status-code'], 501); @@ -843,6 +874,19 @@ class ProjectsConsoleClientTest extends Scope 'name' => $name, ]); + $email = uniqid() . 'user@localhost.test'; + + $response = $this->client->call(Client::METHOD_POST, '/account', array_merge([ + 'origin' => 'http://localhost', + 'content-type' => 'application/json', + 'x-appwrite-project' => $id, + ]), [ + 'userId' => ID::unique(), + 'email' => $email, + 'password' => $password, + 'name' => $name, + ]); + $this->assertEquals($response['headers']['status-code'], 501); /** @@ -858,6 +902,8 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(200, $response['headers']['status-code']); $this->assertNotEmpty($response['body']['$id']); + $email = uniqid() . 'user@localhost.test'; + $response = $this->client->call(Client::METHOD_POST, '/account', array_merge([ 'origin' => 'http://localhost', 'content-type' => 'application/json', diff --git a/tests/e2e/Services/Storage/StorageBase.php b/tests/e2e/Services/Storage/StorageBase.php index baef838979..3169077f99 100644 --- a/tests/e2e/Services/Storage/StorageBase.php +++ b/tests/e2e/Services/Storage/StorageBase.php @@ -57,8 +57,7 @@ trait StorageBase $this->assertEquals('logo.png', $file['body']['name']); $this->assertEquals('image/png', $file['body']['mimeType']); $this->assertEquals(47218, $file['body']['sizeOriginal']); - $this->assertTrue(md5_file(realpath(__DIR__ . '/../../../resources/logo.png')) != $file['body']['signature']); // should validate that the file is encrypted - + $this->assertTrue(md5_file(realpath(__DIR__ . '/../../../resources/logo.png')) == $file['body']['signature']); /** * Test for Large File above 20MB * This should also validate the test for when Bucket encryption @@ -289,7 +288,7 @@ trait StorageBase $this->assertEquals('logo.png', $file['body']['name']); $this->assertEquals('image/png', $file['body']['mimeType']); $this->assertEquals(47218, $file['body']['sizeOriginal']); - $this->assertTrue(md5_file(realpath(__DIR__ . '/../../../resources/logo.png')) != $file['body']['signature']); // should validate that the file is encrypted + $this->assertTrue(md5_file(realpath(__DIR__ . '/../../../resources/logo.png')) == $file['body']['signature']); return ['bucketId' => $bucketId]; }