diff --git a/CHANGES.md b/CHANGES.md index b57ae948b..c5c78fd02 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +# Version 0.6.0 (PRE-RELEASE) + +## Breaking Changes + +* Updated all the REST API query params to be in camelCase + # Version 0.5.3 (PRE-RELEASE) ## Bug Fixes diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 7c319d296..0918cc6f6 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -692,7 +692,7 @@ $utopia->patch('/v1/account/password') ->label('sdk.method', 'updatePassword') ->label('sdk.description', '/docs/references/account/update-password.md') ->param('password', '', function () { return new Password(); }, 'New user password.') - ->param('old-password', '', function () { return new Password(); }, 'Old user password.') + ->param('oldPassword', '', function () { return new Password(); }, 'Old user password.') ->action( function ($password, $oldPassword) use ($response, $user, $projectDB, $audit, $oauth2Keys) { if (!Auth::passwordVerify($oldPassword, $user->getAttribute('password'))) { // Double check user password @@ -1087,11 +1087,11 @@ $utopia->put('/v1/account/recovery') ->label('abuse-key', 'url:{url},userId:{param-userId}') ->param('userId', '', function () { return new UID(); }, 'User account UID address.') ->param('secret', '', function () { return new Text(256); }, 'Valid reset token.') - ->param('password-a', '', function () { return new Password(); }, 'New password.') - ->param('password-b', '', function () {return new Password(); }, 'New password again.') + ->param('password', '', function () { return new Password(); }, 'New password.') + ->param('passwordAgain', '', function () {return new Password(); }, 'New password again.') ->action( - function ($userId, $secret, $passwordA, $passwordB) use ($response, $projectDB, $audit) { - if ($passwordA !== $passwordB) { + function ($userId, $secret, $password, $passwordAgain) use ($response, $projectDB, $audit) { + if ($password !== $passwordAgain) { throw new Exception('Passwords must match', 400); } @@ -1117,7 +1117,7 @@ $utopia->put('/v1/account/recovery') Authorization::setRole('user:'.$profile->getId()); $profile = $projectDB->updateDocument(array_merge($profile->getArrayCopy(), [ - 'password' => Auth::passwordHash($passwordA), + 'password' => Auth::passwordHash($password), 'password-update' => time(), 'emailVerification' => true, ])); diff --git a/app/controllers/api/database.php b/app/controllers/api/database.php index 94dec67e9..34937e97f 100644 --- a/app/controllers/api/database.php +++ b/app/controllers/api/database.php @@ -379,9 +379,9 @@ $utopia->get('/v1/database/collections/:collectionId/documents') ->param('filters', [], function () { return new ArrayList(new Text(128)); }, 'Array of filter strings. Each filter is constructed from a key name, comparison operator (=, !=, >, <, <=, >=) and a value. You can also use a dot (.) separator in attribute names to filter by child document attributes. Examples: \'name=John Doe\' or \'category.$id>=5bed2d152c362\'.', true) ->param('offset', 0, function () { return new Range(0, 900000000); }, 'Offset value. Use this value to manage pagination.', true) ->param('limit', 50, function () { return new Range(0, 1000); }, 'Maximum number of documents to return in response. Use this value to manage pagination.', true) - ->param('order-field', '$id', function () { return new Text(128); }, 'Document field that results will be sorted by.', true) - ->param('order-type', 'ASC', function () { return new WhiteList(array('DESC', 'ASC')); }, 'Order direction. Possible values are DESC for descending order, or ASC for ascending order.', true) - ->param('order-cast', 'string', function () { return new WhiteList(array('int', 'string', 'date', 'time', 'datetime')); }, 'Order field type casting. Possible values are int, string, date, time or datetime. The database will attempt to cast the order field to the value you pass here. The default value is a string.', true) + ->param('orderField', '$id', function () { return new Text(128); }, 'Document field that results will be sorted by.', true) + ->param('orderType', 'ASC', function () { return new WhiteList(array('DESC', 'ASC')); }, 'Order direction. Possible values are DESC for descending order, or ASC for ascending order.', true) + ->param('orderCast', 'string', function () { return new WhiteList(array('int', 'string', 'date', 'time', 'datetime')); }, 'Order field type casting. Possible values are int, string, date, time or datetime. The database will attempt to cast the order field to the value you pass here. The default value is a string.', true) ->param('search', '', function () { return new Text(256); }, 'Search query. Enter any free text search. The database will try to find a match against all document attributes and children.', true) ->param('first', 0, function () { return new Range(0, 1); }, 'Return only first document. Pass 1 for true or 0 for false. The default value is 0.', true) ->param('last', 0, function () { return new Range(0, 1); }, 'Return only last document. Pass 1 for true or 0 for false. The default value is 0.', true) diff --git a/app/views/console/database/collection.phtml b/app/views/console/database/collection.phtml index 8a904fe74..520244418 100644 --- a/app/views/console/database/collection.phtml +++ b/app/views/console/database/collection.phtml @@ -47,7 +47,7 @@ $collection = $this->getParam('collection', []); data-param-search="{{router.params.search}}" data-param-limit="" data-param-offset="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-documents" data-success="state" @@ -69,7 +69,7 @@ $collection = $this->getParam('collection', []); data-param-search="{{router.params.search}}" data-param-limit="" data-param-offset="{{router.params.offset}}" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-documents"> @@ -132,7 +132,7 @@ $collection = $this->getParam('collection', []); data-param-collection-id="{{router.params.id}}" data-param-search="{{router.params.search}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-documents" data-success="state" @@ -148,7 +148,7 @@ $collection = $this->getParam('collection', []); data-param-collection-id="{{router.params.id}}" data-param-search="{{router.params.search}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-documents" data-success="state" diff --git a/app/views/console/database/index.phtml b/app/views/console/database/index.phtml index 46fa1c82d..8b148c18d 100644 --- a/app/views/console/database/index.phtml +++ b/app/views/console/database/index.phtml @@ -42,7 +42,7 @@ data-param-search="{{router.params.search}}" data-param-limit="" data-param-offset="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-collections" data-success="state" @@ -60,7 +60,7 @@ data-param-search="{{router.params.search}}" data-param-limit="" data-param-offset="{{router.params.offset}}" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-collections"> @@ -77,7 +77,7 @@ data-param-search="" data-param-limit="" data-param-offset="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-documents" data-success="state" @@ -100,7 +100,7 @@ data-event="submit" data-param-search="{{router.params.search}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-collections" data-success="state" @@ -115,7 +115,7 @@ data-event="submit" data-param-search="{{router.params.search}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-collections" data-success="state" @@ -139,7 +139,7 @@ data-param-search="{{router.params.dsearch}}" data-param-limit="" data-param-offset="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-documents" data-success="state" @@ -158,7 +158,7 @@ data-param-search="{{router.params.dsearch}}" data-param-limit="" data-param-offset="{{router.params.doffset}}" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-documents"> @@ -196,7 +196,7 @@ data-param-collection-id="{{router.params.collectionId}}" data-param-search="{{router.params.dsearch}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-documents" data-success="state" @@ -212,7 +212,7 @@ data-param-collection-id="{{router.params.collectionId}}" data-param-search="{{router.params.dsearch}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-documents" data-success="state" diff --git a/app/views/console/storage/index.phtml b/app/views/console/storage/index.phtml index 50fdc3941..40ea973a4 100644 --- a/app/views/console/storage/index.phtml +++ b/app/views/console/storage/index.phtml @@ -57,7 +57,7 @@ $fileLimitHuman = $this->getParam('fileLimitHuman', 0); data-param-search="{{router.params.search}}" data-param-limit="" data-param-offset="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-files" data-success="state" @@ -78,7 +78,7 @@ $fileLimitHuman = $this->getParam('fileLimitHuman', 0); data-param-search="{{router.params.search}}" data-param-limit="" data-param-offset="{{router.params.offset}}" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-files"> @@ -207,7 +207,7 @@ $fileLimitHuman = $this->getParam('fileLimitHuman', 0); data-event="submit" data-param-search="{{router.params.search}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-files" data-success="state" @@ -222,7 +222,7 @@ $fileLimitHuman = $this->getParam('fileLimitHuman', 0); data-event="submit" data-param-search="{{router.params.search}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-files" data-success="state" diff --git a/app/views/console/users/index.phtml b/app/views/console/users/index.phtml index 38643da6c..c371ddb54 100644 --- a/app/views/console/users/index.phtml +++ b/app/views/console/users/index.phtml @@ -56,7 +56,7 @@ $providers = $this->getParam('providers', []); data-param-search="{{router.params.search}}" data-param-limit="" data-param-offset="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-users" data-success="state" @@ -77,7 +77,7 @@ $providers = $this->getParam('providers', []); data-param-search="{{router.params.search}}" data-param-limit="" data-param-offset="{{router.params.offset}}" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-users"> @@ -141,7 +141,7 @@ $providers = $this->getParam('providers', []); data-event="submit" data-param-search="{{router.params.search}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-users" data-success="state" @@ -156,7 +156,7 @@ $providers = $this->getParam('providers', []); data-event="submit" data-param-search="{{router.params.search}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-users" data-success="state" @@ -203,7 +203,7 @@ $providers = $this->getParam('providers', []); data-param-search="{{router.params.search}}" data-param-limit="" data-param-offset="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-teams" data-success="state" @@ -224,7 +224,7 @@ $providers = $this->getParam('providers', []); data-param-search="{{router.params.search}}" data-param-limit="" data-param-offset="{{router.params.offset}}" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-teams"> @@ -298,7 +298,7 @@ $providers = $this->getParam('providers', []); data-event="submit" data-param-search="{{router.params.search}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-teams" data-success="state" @@ -313,7 +313,7 @@ $providers = $this->getParam('providers', []); data-event="submit" data-param-search="{{router.params.search}}" data-param-limit="" - data-param-order-type="DESC" + data-param-orderType="DESC" data-scope="sdk" data-name="project-teams" data-success="state" diff --git a/public/dist/scripts/app-all.js b/public/dist/scripts/app-all.js index 6a441c725..494635e7b 100644 --- a/public/dist/scripts/app-all.js +++ b/public/dist/scripts/app-all.js @@ -33,7 +33,7 @@ let path='/account/name';let payload={};if(name){payload['name']=name;} return http.patch(path,{'content-type':'application/json',},payload);},updatePassword:function(password,oldPassword){if(password===undefined){throw new Error('Missing required parameter: "password"');} if(oldPassword===undefined){throw new Error('Missing required parameter: "oldPassword"');} let path='/account/password';let payload={};if(password){payload['password']=password;} -if(oldPassword){payload['old-password']=oldPassword;} +if(oldPassword){payload['oldPassword']=oldPassword;} return http.patch(path,{'content-type':'application/json',},payload);},getPrefs:function(){let path='/account/prefs';let payload={};return http.get(path,{'content-type':'application/json',},payload);},updatePrefs:function(prefs){if(prefs===undefined){throw new Error('Missing required parameter: "prefs"');} let path='/account/prefs';let payload={};if(prefs){payload['prefs']=prefs;} return http.patch(path,{'content-type':'application/json',},payload);},createRecovery:function(email,url){if(email===undefined){throw new Error('Missing required parameter: "email"');} @@ -46,8 +46,8 @@ if(passwordA===undefined){throw new Error('Missing required parameter: "password if(passwordB===undefined){throw new Error('Missing required parameter: "passwordB"');} let path='/account/recovery';let payload={};if(userId){payload['userId']=userId;} if(secret){payload['secret']=secret;} -if(passwordA){payload['password-a']=passwordA;} -if(passwordB){payload['password-b']=passwordB;} +if(passwordA){payload['password']=passwordA;} +if(passwordB){payload['passwordAgain']=passwordB;} return http.put(path,{'content-type':'application/json',},payload);},getSessions:function(){let path='/account/sessions';let payload={};return http.get(path,{'content-type':'application/json',},payload);},createSession:function(email,password){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(password===undefined){throw new Error('Missing required parameter: "password"');} let path='/account/sessions';let payload={};if(email){payload['email']=email;} @@ -113,9 +113,9 @@ let path='/database/collections/{collectionId}'.replace(new RegExp('{collectionI let path='/database/collections/{collectionId}/documents'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};if(filters){payload['filters']=filters;} if(offset){payload['offset']=offset;} if(limit){payload['limit']=limit;} -if(orderField){payload['order-field']=orderField;} -if(orderType){payload['order-type']=orderType;} -if(orderCast){payload['order-cast']=orderCast;} +if(orderField){payload['orderField']=orderField;} +if(orderType){payload['orderType']=orderType;} +if(orderCast){payload['orderCast']=orderCast;} if(search){payload['search']=search;} if(first){payload['first']=first;} if(last){payload['last']=last;} diff --git a/public/dist/scripts/app-dep.js b/public/dist/scripts/app-dep.js index 79b84a8a0..7527847e8 100644 --- a/public/dist/scripts/app-dep.js +++ b/public/dist/scripts/app-dep.js @@ -33,7 +33,7 @@ let path='/account/name';let payload={};if(name){payload['name']=name;} return http.patch(path,{'content-type':'application/json',},payload);},updatePassword:function(password,oldPassword){if(password===undefined){throw new Error('Missing required parameter: "password"');} if(oldPassword===undefined){throw new Error('Missing required parameter: "oldPassword"');} let path='/account/password';let payload={};if(password){payload['password']=password;} -if(oldPassword){payload['old-password']=oldPassword;} +if(oldPassword){payload['oldPassword']=oldPassword;} return http.patch(path,{'content-type':'application/json',},payload);},getPrefs:function(){let path='/account/prefs';let payload={};return http.get(path,{'content-type':'application/json',},payload);},updatePrefs:function(prefs){if(prefs===undefined){throw new Error('Missing required parameter: "prefs"');} let path='/account/prefs';let payload={};if(prefs){payload['prefs']=prefs;} return http.patch(path,{'content-type':'application/json',},payload);},createRecovery:function(email,url){if(email===undefined){throw new Error('Missing required parameter: "email"');} @@ -46,8 +46,8 @@ if(passwordA===undefined){throw new Error('Missing required parameter: "password if(passwordB===undefined){throw new Error('Missing required parameter: "passwordB"');} let path='/account/recovery';let payload={};if(userId){payload['userId']=userId;} if(secret){payload['secret']=secret;} -if(passwordA){payload['password-a']=passwordA;} -if(passwordB){payload['password-b']=passwordB;} +if(passwordA){payload['password']=passwordA;} +if(passwordB){payload['passwordAgain']=passwordB;} return http.put(path,{'content-type':'application/json',},payload);},getSessions:function(){let path='/account/sessions';let payload={};return http.get(path,{'content-type':'application/json',},payload);},createSession:function(email,password){if(email===undefined){throw new Error('Missing required parameter: "email"');} if(password===undefined){throw new Error('Missing required parameter: "password"');} let path='/account/sessions';let payload={};if(email){payload['email']=email;} @@ -113,9 +113,9 @@ let path='/database/collections/{collectionId}'.replace(new RegExp('{collectionI let path='/database/collections/{collectionId}/documents'.replace(new RegExp('{collectionId}','g'),collectionId);let payload={};if(filters){payload['filters']=filters;} if(offset){payload['offset']=offset;} if(limit){payload['limit']=limit;} -if(orderField){payload['order-field']=orderField;} -if(orderType){payload['order-type']=orderType;} -if(orderCast){payload['order-cast']=orderCast;} +if(orderField){payload['orderField']=orderField;} +if(orderType){payload['orderType']=orderType;} +if(orderCast){payload['orderCast']=orderCast;} if(search){payload['search']=search;} if(first){payload['first']=first;} if(last){payload['last']=last;} diff --git a/public/scripts/dependencies/appwrite.js b/public/scripts/dependencies/appwrite.js index f707b7f77..ecea75816 100644 --- a/public/scripts/dependencies/appwrite.js +++ b/public/scripts/dependencies/appwrite.js @@ -516,7 +516,7 @@ } if(oldPassword) { - payload['old-password'] = oldPassword; + payload['oldPassword'] = oldPassword; } return http @@ -665,11 +665,11 @@ } if(passwordA) { - payload['password-a'] = passwordA; + payload['password'] = passwordA; } if(passwordB) { - payload['password-b'] = passwordB; + payload['passwordAgain'] = passwordB; } return http @@ -1401,15 +1401,15 @@ } if(orderField) { - payload['order-field'] = orderField; + payload['orderField'] = orderField; } if(orderType) { - payload['order-type'] = orderType; + payload['orderType'] = orderType; } if(orderCast) { - payload['order-cast'] = orderCast; + payload['orderCast'] = orderCast; } if(search) { diff --git a/tests/e2e/Services/Account/AccountBase.php b/tests/e2e/Services/Account/AccountBase.php index bb9b3d8d6..0bd7a1a66 100644 --- a/tests/e2e/Services/Account/AccountBase.php +++ b/tests/e2e/Services/Account/AccountBase.php @@ -449,7 +449,7 @@ trait AccountBase 'cookie' => 'a_session_'.$this->getProject()['$id'].'=' . $session, ]), [ 'password' => 'new-password', - 'old-password' => $password, + 'oldPassword' => $password, ]); $this->assertEquals($response['headers']['status-code'], 200); @@ -1019,8 +1019,8 @@ trait AccountBase ]), [ 'userId' => $id, 'secret' => $recovery, - 'password-a' => $newPassowrd, - 'password-b' => $newPassowrd, + 'password' => $newPassowrd, + 'passwordAgain' => $newPassowrd, ]); $this->assertEquals(200, $response['headers']['status-code']); @@ -1035,8 +1035,8 @@ trait AccountBase ]), [ 'userId' => 'ewewe', 'secret' => $recovery, - 'password-a' => $newPassowrd, - 'password-b' => $newPassowrd, + 'password' => $newPassowrd, + 'passwordAgain' => $newPassowrd, ]); $this->assertEquals(404, $response['headers']['status-code']); @@ -1048,8 +1048,8 @@ trait AccountBase ]), [ 'userId' => $id, 'secret' => 'sdasdasdasd', - 'password-a' => $newPassowrd, - 'password-b' => $newPassowrd, + 'password' => $newPassowrd, + 'passwordAgain' => $newPassowrd, ]); $this->assertEquals(401, $response['headers']['status-code']); @@ -1061,8 +1061,8 @@ trait AccountBase ]), [ 'userId' => $id, 'secret' => $recovery, - 'password-a' => $newPassowrd.'x', - 'password-b' => $newPassowrd, + 'password' => $newPassowrd.'x', + 'passwordAgain' => $newPassowrd, ]); $this->assertEquals(400, $response['headers']['status-code']); diff --git a/tests/e2e/Services/Database/DatabaseBase.php b/tests/e2e/Services/Database/DatabaseBase.php index 15ffb1901..60dc1f81c 100644 --- a/tests/e2e/Services/Database/DatabaseBase.php +++ b/tests/e2e/Services/Database/DatabaseBase.php @@ -254,9 +254,9 @@ trait DatabaseBase 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'order-field' => 'releaseYear', - 'order-type' => 'ASC', - 'order-cast' => 'int', + 'orderField' => 'releaseYear', + 'orderType' => 'ASC', + 'orderCast' => 'int', ]); $this->assertEquals(1944, $documents['body']['documents'][0]['releaseYear']); @@ -268,9 +268,9 @@ trait DatabaseBase 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'order-field' => 'releaseYear', - 'order-type' => 'DESC', - 'order-cast' => 'int', + 'orderField' => 'releaseYear', + 'orderType' => 'DESC', + 'orderCast' => 'int', ]); $this->assertEquals(1944, $documents['body']['documents'][2]['releaseYear']); @@ -291,9 +291,9 @@ trait DatabaseBase 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ 'limit' => 1, - 'order-field' => 'releaseYear', - 'order-type' => 'ASC', - 'order-cast' => 'int', + 'orderField' => 'releaseYear', + 'orderType' => 'ASC', + 'orderCast' => 'int', ]); $this->assertEquals(1944, $documents['body']['documents'][0]['releaseYear']); @@ -305,9 +305,9 @@ trait DatabaseBase ], $this->getHeaders()), [ 'limit' => 2, 'offset' => 1, - 'order-field' => 'releaseYear', - 'order-type' => 'ASC', - 'order-cast' => 'int', + 'orderField' => 'releaseYear', + 'orderType' => 'ASC', + 'orderCast' => 'int', ]); $this->assertEquals(2017, $documents['body']['documents'][0]['releaseYear']); @@ -327,9 +327,9 @@ trait DatabaseBase 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ 'limit' => 1, - 'order-field' => 'releaseYear', - 'order-type' => 'ASC', - 'order-cast' => 'int', + 'orderField' => 'releaseYear', + 'orderType' => 'ASC', + 'orderCast' => 'int', 'first' => true, ]); @@ -341,9 +341,9 @@ trait DatabaseBase ], $this->getHeaders()), [ 'limit' => 2, 'offset' => 1, - 'order-field' => 'releaseYear', - 'order-type' => 'ASC', - 'order-cast' => 'int', + 'orderField' => 'releaseYear', + 'orderType' => 'ASC', + 'orderCast' => 'int', 'last' => true, ]);