From 9507001b1f2dc12a27f03f8a723f2251273c85d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nil=20Portugu=C3=A9s=20Calder=C3=B3?= Date: Sat, 14 Nov 2015 17:57:21 +0100 Subject: [PATCH] Added to JsonApiResponseTrait fields support in links for collections --- .idea/scopes/scope_settings.xml | 5 + .idea/template/template_variable_settings.xml | 3 + .../JsonApiResponseTrait.php | 94 +++++++++++-------- 3 files changed, 61 insertions(+), 41 deletions(-) create mode 100644 .idea/scopes/scope_settings.xml create mode 100644 .idea/template/template_variable_settings.xml diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml new file mode 100644 index 0000000..922003b --- /dev/null +++ b/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/template/template_variable_settings.xml b/.idea/template/template_variable_settings.xml new file mode 100644 index 0000000..06b8335 --- /dev/null +++ b/.idea/template/template_variable_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiResponseTrait.php b/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiResponseTrait.php index fd4653d..4b478ad 100644 --- a/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiResponseTrait.php +++ b/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiResponseTrait.php @@ -84,13 +84,13 @@ protected function resourceNotFoundResponse($errorTitle, $errorMessage, $parentU 'status' => 404, 'code' => 'not_found', 'title' => $errorTitle, - 'detail' => $errorMessage, + 'detail' => $errorMessage ], 'links' => [ 'parent' => [ - 'href' => $parentUrl, - ], - ], + 'href' => $parentUrl + ] + ] ]); return (new HttpFoundationFactory())->createResponse($this->addHeaders(new ResourceNotFoundResponse($json))); @@ -119,8 +119,8 @@ protected function resourcePostErrorResponse($errorTitle, $errorMessage) 'status' => 409, 'code' => 'Conflict', 'title' => $errorTitle, - 'detail' => $errorMessage, - ], + 'detail' => $errorMessage + ] ]); return (new HttpFoundationFactory())->createResponse($this->addHeaders(new ResourcePostErrorResponse($json))); @@ -133,6 +133,8 @@ protected function resourcePostErrorResponse($errorTitle, $errorMessage) */ protected function resourceProcessingResponse($json) { + + return (new HttpFoundationFactory())->createResponse($this->addHeaders(new ResourceProcessingResponse($json))); } @@ -167,9 +169,9 @@ protected function response($json) */ protected function collectionResponse($classMethod, Serializer $serializer, Request $request, $value, $totalAmount) { - $controllerRoute = str_replace('::', '@', '\\'.$classMethod); + $controllerRoute = str_replace('::', '@', "\\" . $classMethod); - $pageNumber = $request->getPageNumber(); + $pageNumber = $request->getPageNumber(); $resultsPerPage = $request->getPageSize(); $serializer->getTransformer()->setSelfUrl( @@ -180,15 +182,16 @@ protected function collectionResponse($classMethod, Serializer $serializer, Requ 'page' => array_filter( [ 'number' => $pageNumber, - 'size' => $request->getPageSize(), - 'limit' => $request->getPageLimit(), + 'size' => $request->getPageSize(), + 'limit' => $request->getPageLimit(), 'cursor' => $request->getPageCursor(), 'offset' => $request->getPageOffset(), ] ), + 'fields' => $request->getQueryParam('fields'), 'filter' => $request->getQueryParam('filter'), 'sort' => $request->getQueryParam('sort'), - 'include' => $request->getQueryParam('include'), + 'include' => $request->getQueryParam('include') ] ) ) @@ -203,15 +206,16 @@ protected function collectionResponse($classMethod, Serializer $serializer, Requ 'page' => array_filter( [ 'number' => $pageNumber - 1, - 'size' => $request->getPageSize(), - 'limit' => $request->getPageLimit(), + 'size' => $request->getPageSize(), + 'limit' => $request->getPageLimit(), 'cursor' => $request->getPageCursor(), 'offset' => $request->getPageOffset(), ] ), + 'fields' => $request->getQueryParam('fields'), 'filter' => $request->getQueryParam('filter'), 'sort' => $request->getQueryParam('sort'), - 'include' => $request->getQueryParam('include'), + 'include' => $request->getQueryParam('include') ] ) ) @@ -227,15 +231,16 @@ protected function collectionResponse($classMethod, Serializer $serializer, Requ 'page' => array_filter( [ 'number' => $pageNumber + 1, - 'size' => $request->getPageSize(), - 'limit' => $request->getPageLimit(), + 'size' => $request->getPageSize(), + 'limit' => $request->getPageLimit(), 'cursor' => $request->getPageCursor(), 'offset' => $request->getPageOffset(), ] ), + 'fields' => $request->getQueryParam('fields'), 'filter' => $request->getQueryParam('filter'), 'sort' => $request->getQueryParam('sort'), - 'include' => $request->getQueryParam('include'), + 'include' => $request->getQueryParam('include') ] ) ) @@ -250,15 +255,16 @@ protected function collectionResponse($classMethod, Serializer $serializer, Requ 'page' => array_filter( [ 'number' => 1, - 'size' => $request->getPageSize(), - 'limit' => $request->getPageLimit(), + 'size' => $request->getPageSize(), + 'limit' => $request->getPageLimit(), 'cursor' => $request->getPageCursor(), 'offset' => $request->getPageOffset(), ] ), + 'fields' => $request->getQueryParam('fields'), 'filter' => $request->getQueryParam('filter'), 'sort' => $request->getQueryParam('sort'), - 'include' => $request->getQueryParam('include'), + 'include' => $request->getQueryParam('include') ] ) ) @@ -270,25 +276,26 @@ protected function collectionResponse($classMethod, Serializer $serializer, Requ $controllerRoute, array_filter( [ - 'page' => array_filter( + 'page' => array_filter( [ 'number' => ceil($totalAmount / $resultsPerPage), - 'size' => $request->getPageSize(), - 'limit' => $request->getPageLimit(), + 'size' => $request->getPageSize(), + 'limit' => $request->getPageLimit(), 'cursor' => $request->getPageCursor(), 'offset' => $request->getPageOffset(), ] ), + 'fields' => $request->getQueryParam('fields'), 'filter' => $request->getQueryParam('filter'), 'sort' => $request->getQueryParam('sort'), - 'include' => $request->getQueryParam('include'), + 'include' => $request->getQueryParam('include') ] ) ) ) ); - $json = $serializer->serialize($value); + $json = $serializer->serialize($value, $request); return (new HttpFoundationFactory())->createResponse($this->addHeaders(new Response($json))); } @@ -298,20 +305,20 @@ protected function collectionResponse($classMethod, Serializer $serializer, Requ * @param string $errorMessage * @param string $classMethod * @param Request $request - * @param int $totalAmount + * @param int $totalAmount * * @return \Symfony\Component\HttpFoundation\Response */ private function collectionNotFoundResponse($errorTitle, $errorMessage, $classMethod, Request $request, $totalAmount) { - $controllerRoute = str_replace('::', '@', '\\'.$classMethod); + $controllerRoute = str_replace('::', '@', "\\" . $classMethod); $json = json_encode([ 'errors' => [ 'status' => 404, 'code' => 'not_found', 'title' => $errorTitle, - 'detail' => $errorMessage, + 'detail' => $errorMessage ], 'links' => [ 'first' => [ @@ -322,43 +329,45 @@ private function collectionNotFoundResponse($errorTitle, $errorMessage, $classMe 'page' => array_filter( [ 'number' => 1, - 'size' => $request->getPageSize(), - 'limit' => $request->getPageLimit(), + 'size' => $request->getPageSize(), + 'limit' => $request->getPageLimit(), 'cursor' => $request->getPageCursor(), 'offset' => $request->getPageOffset(), ] ), + 'fields' => $request->getQueryParam('fields'), 'filter' => $request->getQueryParam('filter'), 'sort' => $request->getQueryParam('sort'), - 'include' => $request->getQueryParam('include'), + 'include' => $request->getQueryParam('include') ] ) - ), + ) ], 'last' => [ - 'href' => urldecode( + 'href' => urldecode( action( $controllerRoute, array_filter( [ - 'page' => array_filter( + 'page' => array_filter( [ 'number' => ceil($totalAmount / $request->getPageSize()), - 'size' => $request->getPageSize(), - 'limit' => $request->getPageLimit(), + 'size' => $request->getPageSize(), + 'limit' => $request->getPageLimit(), 'cursor' => $request->getPageCursor(), 'offset' => $request->getPageOffset(), ] ), + 'fields' => $request->getQueryParam('fields'), 'filter' => $request->getQueryParam('filter'), 'sort' => $request->getQueryParam('sort'), - 'include' => $request->getQueryParam('include'), + 'include' => $request->getQueryParam('include') ] ) ) - ), - ], - ], + ) + ] + ] ]); return (new HttpFoundationFactory())->createResponse($this->addHeaders(new ResourceNotFoundResponse($json))); @@ -371,6 +380,9 @@ private function collectionNotFoundResponse($errorTitle, $errorMessage, $classMe */ protected function unsupportedActionResponse($json) { - return (new HttpFoundationFactory())->createResponse($this->addHeaders(new UnsupportedActionResponse($json))); + return (new HttpFoundationFactory()) + ->createResponse( + $this->addHeaders(new UnsupportedActionResponse($json)) + ); } }