From a388d199dcd343acd30816634acc0fa814428dcc Mon Sep 17 00:00:00 2001 From: Ryan Fletcher Date: Fri, 13 Jul 2018 14:55:46 -0400 Subject: [PATCH] Refactored error handling in StackApiController and moved it into ApiHelper.php, this will allow me to use the same checks in all controllers. Signed-off-by: Ryan Fletcher --- appinfo/routes.php | 3 +- lib/Controller/Helper/ApiHelper.php | 49 +++++++++++++++++++++++++++ lib/Controller/StackApiController.php | 33 ++++++------------ 3 files changed, 60 insertions(+), 25 deletions(-) create mode 100644 lib/Controller/Helper/ApiHelper.php diff --git a/appinfo/routes.php b/appinfo/routes.php index 3c9eaf484..2b2e967c0 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -84,8 +84,7 @@ return [ ['name' => 'board_api#delete', 'url' => '/api/v1.0/boards/{boardId}', 'verb' => 'DELETE'], ['name' => 'board_api#update', 'url' => '/api/v1.0/boards/{boardId}', 'verb' => 'PUT'], ['name' => 'board_api#undo_delete', 'url' => '/api/v1.0/boards/{boardId}/undo_delete', 'verb' => 'POST'], - - // TODO: Add in a get for the stack_api + ['name' => 'stack_api#index', 'url' => '/api/v1.0/boards/{boardId}/stacks', 'verb' => 'GET'], ['name' => 'stack_api#create', 'url' => '/api/v1.0/boards/{boardId}/stacks', 'verb' => 'POST'], ['name' => 'stack_api#update', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}', 'verb' => 'PUT'], diff --git a/lib/Controller/Helper/ApiHelper.php b/lib/Controller/Helper/ApiHelper.php new file mode 100644 index 000000000..f8f16828b --- /dev/null +++ b/lib/Controller/Helper/ApiHelper.php @@ -0,0 +1,49 @@ + + * + * @author Ryan Fletcher + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Deck\Controller\Helper; + +use OCP\AppFramework\Http; + +class ApiHelper { + + public static function entityHasError($entityId, $entityName, $service) { + if (is_numeric($entityId) === false) { + $error['message'] = $entityName . ' id must be a number'; + $error['status'] = HTTP::STATUS_BAD_REQUEST; + return $error; + } + + $entity = $service->find($entityId); + + if ($entity === false || $entity === null) { + $error['message'] = 'Board does not exist'; + $error['status'] = HTTP::STATUS_NOT_FOUND; + return $error; + } + + return false; + } + +} \ No newline at end of file diff --git a/lib/Controller/StackApiController.php b/lib/Controller/StackApiController.php index 54c07900f..cba2383ed 100644 --- a/lib/Controller/StackApiController.php +++ b/lib/Controller/StackApiController.php @@ -31,6 +31,8 @@ use OCP\IRequest; use OCA\Deck\StatusException; use OCA\Deck\Service\StackService; +use OCA\Deck\Service\BoardService; +use OCA\Deck\Controller\Helper\ApiHelper; /** * Class StackApiController @@ -42,6 +44,7 @@ class StackApiController extends ApiController { private $boardService; private $stackService; private $userInfo; + private $apiHelper; /** * @param string $appName @@ -52,6 +55,7 @@ class StackApiController extends ApiController { parent::__construct($appName, $request); $this->service = $stackService; $this->boardService = $boardService; + $this->apiHelper = new ApiHelper(); } /** @@ -62,7 +66,7 @@ class StackApiController extends ApiController { * Return all of the stacks in the specified board. */ public function index() { - $boardError = boardHasError($this->request->params['boardId']); + $boardError = $this->apiHelper->entityHasError( $this->request->params['boardId'], 'board', $this->boardService ); if ($boardError) { return new DataResponse($boardError['message'], $boardError['status']); @@ -77,6 +81,8 @@ class StackApiController extends ApiController { return new DataResponse($stacks, HTTP::STATUS_OK); } + + /** * @NoAdminRequired * @CORS @@ -89,7 +95,7 @@ class StackApiController extends ApiController { */ public function create($title, $order) { - $boardError = boardHasError($this->request->params['boardId']); + $boardError = $this->apiHelper->entityHasError( $this->request->params['boardId'], 'board', $this->boardService ); if ($boardError) { return new DataResponse($boardError['message'], $boardError['status']); @@ -121,7 +127,7 @@ class StackApiController extends ApiController { */ public function update($title, $order) { - $boardError = boardHasError($this->request->params['boardId']); + $boardError = $this->apiHelper->entityHasError( $this->request->params['boardId'], 'board', $this->boardService ); if ($boardError) { return new DataResponse($boardError['message'], $boardError['status']); @@ -157,7 +163,7 @@ class StackApiController extends ApiController { */ public function delete() { - $boardError = boardHasError($this->request->params['boardId']); + $boardError = $this->apiHelper->entityHasError( $this->request->params['boardId'], 'board', $this->boardService ); if ($boardError) { return new DataResponse($boardError['message'], $boardError['status']); @@ -175,23 +181,4 @@ class StackApiController extends ApiController { return new DataResponse($stack, HTTP::STATUS_OK); } - - private function boardHasError($boardId) { - if (is_numeric($boardId) === false) { - $error['message'] = 'Board id must be a number'; - $error['status'] = HTTP::STATUS_BAD_REQUEST; - return $error; - } - - $board = $this->boardService->find($boardId); - - if ($board === false || $board === null) { - $error['message'] = 'Board does not exist'; - $error['status'] = HTTP::STATUS_NOT_FOUND; - return $error; - } - - return false; - } - }