From 081d3ecbdec9127de162ed7a52600d0237e24062 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Tue, 15 Jun 2021 13:08:22 +0545 Subject: [PATCH] list buckets endpoint --- app/controllers/api/storage.php | 37 ++++++++++++++++++++++ tests/e2e/Services/Storage/StorageBase.php | 22 +++++++++++++ 2 files changed, 59 insertions(+) diff --git a/app/controllers/api/storage.php b/app/controllers/api/storage.php index 9f4e3d6e54..a646f000fe 100644 --- a/app/controllers/api/storage.php +++ b/app/controllers/api/storage.php @@ -97,6 +97,43 @@ App::post('/v1/storage/buckets') }); +App::get('/v1/storage/buckets') + ->desc('List buckets') + ->groups(['api', 'storage']) + ->label('scope', 'buckets.read') + ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT]) + ->label('sdk.namespace', 'storage') + ->label('sdk.method', 'listBuckets') + ->label('sdk.description', '/docs/references/storage/list-buckets.md') + ->label('sdk.response.code', Response::STATUS_CODE_OK) + ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) + ->label('sdk.response.model', Response::MODEL_BUCKET_LIST) + ->param('search', '', new Text(256), 'Search term to filter your list results. Max length: 256 chars.', true) + ->param('limit', 25, new Range(0, 100), 'Results limit value. By default will return maximum 25 results. Maximum of 100 results allowed per request.', true) + ->param('offset', 0, new Range(0, 2000), 'Results offset. The default value is 0. Use this param to manage pagination.', true) + ->param('orderType', 'ASC', new WhiteList(['ASC', 'DESC'], true), 'Order result by ASC or DESC order.', true) + ->inject('response') + ->inject('projectDB') + ->action(function ($search, $limit, $offset, $orderType, $response, $projectDB) { + /** @var Appwrite\Utopia\Response $response */ + /** @var Appwrite\Database\Database $projectDB */ + + $results = $projectDB->getCollection([ + 'limit' => $limit, + 'offset' => $offset, + 'orderType' => $orderType, + 'search' => $search, + 'filters' => [ + '$collection='.Database::SYSTEM_COLLECTION_BUCKETS, + ], + ]); + + $response->dynamic(new Document([ + 'sum' => $projectDB->getSum(), + 'buckets' => $results + ]), Response::MODEL_BUCKET_LIST); + }); + App::post('/v1/storage/files') ->desc('Create File') ->groups(['api', 'storage']) diff --git a/tests/e2e/Services/Storage/StorageBase.php b/tests/e2e/Services/Storage/StorageBase.php index a60cb795ae..a20721e22d 100644 --- a/tests/e2e/Services/Storage/StorageBase.php +++ b/tests/e2e/Services/Storage/StorageBase.php @@ -275,4 +275,26 @@ trait StorageBase return ['bucketId' => $bucketId]; } + + /** + * @depends testCreateBucket + */ + public function testListBucket($data): array + { + $id = $data['bucketId'] ?? ''; + /** + * Test for SUCCESS + */ + $response = $this->client->call(Client::METHOD_GET, '/storage/buckets', + array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); + $this->assertEquals(200, $response['headers']['status-code']); + $this->assertNotEmpty($response['body']); + $this->assertEquals($id, $response['body']['buckets'][0]['$id']); + $this->assertEquals('Test Bucket', $response['body']['buckets'][0]['name']); + + return $data; + } } \ No newline at end of file