/** * {@inheritDoc} */ public function processRequest(Rest\RestRequest $request) { switch ($request->getMethod()) { case 'GET': if (true === $request->hasIdentifier()) { if (false === $request->isRelationship() && false === $request->hasFilters()) { return $this->findRecord($request->getEntityType(), $request->getIdentifier()); } if (true === $request->isRelationshipRetrieve()) { return $this->findRelationship($request->getEntityType(), $request->getIdentifier(), $request->getRelationshipFieldKey()); } throw AdapterException::badRequest('No GET handler found.'); } else { if (true === $request->isAutocomplete()) { // @todo Eventually add pagination (limit/skip) return $this->autocomplete($request->getEntityType(), $request->getAutocompleteKey(), $request->getAutocompleteValue()); } return $this->findAll($request->getEntityType(), []); //, $request->getPagination(), $request->getFieldset(), $request->getInclusions(), $request->getSorting()); } throw AdapterException::badRequest('No GET handler found.'); case 'POST': // @todo Must validate JSON content type if (false === $request->hasIdentifier()) { if (true === $request->hasPayload()) { return $this->createRecord($request->getEntityType(), $request->getPayload(), $request->getFieldset(), $request->getInclusions()); } throw AdapterException::requestPayloadNotFound('Unable to create new entity.'); } throw AdapterException::badRequest('Creating a new record while providing an id is not supported.'); case 'PATCH': // @todo Must validate JSON content type if (false === $request->hasIdentifier()) { throw AdapterException::badRequest('No identifier found. You must specify an ID in the URL.'); } if (false === $request->hasPayload()) { throw AdapterException::requestPayloadNotFound('Unable to update entity.'); } return $this->updateRecord($request->getEntityType(), $request->getIdentifier(), $request->getPayload(), $request->getFieldset(), $request->getInclusions()); case 'DELETE': if (false === $request->hasIdentifier()) { throw AdapterException::badRequest('No identifier found. You must specify an ID in the URL.'); } return $this->deleteRecord($request->getEntityType(), $request->getIdentifier()); throw AdapterException::badRequest('No DELETE request handler found.'); default: throw AdapterException::badRequest(sprintf('The request method "%s" is not supported.', $request->getMethod())); } }