diff --git a/src/Adapters/ModelResourceAdapter.php b/src/Adapters/ModelResourceAdapter.php index 732a564..44f24be 100644 --- a/src/Adapters/ModelResourceAdapter.php +++ b/src/Adapters/ModelResourceAdapter.php @@ -171,9 +171,9 @@ protected function countItems($rangeStart, $rangeEnd, $params, ?WebRequest $requ return count($this->getCollection($rangeStart, $rangeEnd, $params, $request)); } - public function post($payload, $params, WebRequest $request) + public function postResource($resource) { - $model = $this->makeModelFromResource($payload); + $model = $this->makeModelFromResource($resource); $model->save(); return $this->makeResourceFromData($model); diff --git a/src/Adapters/ResourceAdapter.php b/src/Adapters/ResourceAdapter.php index 627ec05..6d03903 100644 --- a/src/Adapters/ResourceAdapter.php +++ b/src/Adapters/ResourceAdapter.php @@ -12,6 +12,15 @@ */ abstract class ResourceAdapter { + public function get($params, ?WebRequest $request) + { + $id = $params["id"]; + + $payload = $this->makeResourceByIdentifier($id); + + return $payload; + } + /** * @param $payload * @param $params @@ -39,20 +48,58 @@ protected function validatePutRequestPayload($payload) return $payload; } - public function get($params, ?WebRequest $request) + public function putResource($resource) { - $id = $params["id"]; + throw new RestImplementationException("Missing implementation of " . __FUNCTION__); + } - $payload = $this->makeResourceByIdentifier($id); + public function post($payload, $params, WebRequest $request) + { + $payload = $this->validatePostRequestPayload($payload); + return $this->postResource($payload); + } + + protected function validatePostRequestPayload($payload) + { + return $this->validateRequestPayload($payload); + } + + public function postResource($resource) + { + throw new RestImplementationException("Missing implementation of " . __FUNCTION__); + } + + public function delete($payload, $params, ?WebRequest $request) + { + throw new RestImplementationException("Missing implementation of " . __FUNCTION__); + } + + + protected function applyParamsToPayload($payload, $params) + { return $payload; } - public abstract function putResource($resource); + private final function validateRequestPayload($payload) + { + if (!is_array($payload)) { + throw new RequestPayloadValidationException("POST and PUT options require a JSON encoded resource object in the body of the request."); + } + + return $payload; + } - public abstract function makeResourceByIdentifier($id); - public abstract function makeResourceFromData($data); + public function makeResourceByIdentifier($id) + { + throw new RestImplementationException("Missing implementation of " . __FUNCTION__); + } + + public function makeResourceFromData($data) + { + throw new RestImplementationException("Missing implementation of " . __FUNCTION__); + } public function list($params, ?WebRequest $request = null) { @@ -69,28 +116,13 @@ public function list($params, ?WebRequest $request = null) return $response; } - public abstract function post($payload, $params, WebRequest $request); - - protected function validatePostRequestPayload($payload) - { - $this->validateRequestPayload($payload); - } - - public abstract function delete($payload, $params, ?WebRequest $request); - - protected abstract function countItems($rangeStart, $rangeEnd, $params, ?WebRequest $request); - - protected abstract function getItems($rangeStart, $rangeEnd, $params, ?WebRequest $request); - - protected function applyParamsToPayload($payload, $params) + protected function countItems($rangeStart, $rangeEnd, $params, ?WebRequest $request) { - return $payload; + throw new RestImplementationException("Missing implementation of " . __FUNCTION__); } - private final function validateRequestPayload($payload) + protected function getItems($rangeStart, $rangeEnd, $params, ?WebRequest $request) { - if (!is_array($payload)) { - throw new RequestPayloadValidationException("POST and PUT options require a JSON encoded resource object in the body of the request."); - } + throw new RestImplementationException("Missing implementation of " . __FUNCTION__); } } \ No newline at end of file diff --git a/src/Exceptions/RestImplementationException.php b/src/Exceptions/RestImplementationException.php new file mode 100644 index 0000000..c256dbd --- /dev/null +++ b/src/Exceptions/RestImplementationException.php @@ -0,0 +1,13 @@ +setContent($er->getMessage()); - } catch (\Throwable $er){ + } catch (RestImplementationException $exception) { + $response = new Response(); + $response->setResponseCode(Response::HTTP_STATUS_CLIENT_ERROR_BAD_REQUEST); + $response->setResponseMessage("Bad request received"); + } catch(\Throwable $er){ $response = new Response(); $response->setResponseCode(500); $response->setResponseMessage("An internal error occurred.");