/** * Override the default index function to get many resources. * @property int filters['improvedId'] * @property int filters['preservedId'] * @return \Symfony\Component\HttpFoundation\Response */ public function index() { $apiRequest = RequestFactory::create(); $page = $apiRequest->getPage(); if (!$page->size()) { $page->setSize($this->pageSize); } $fields = $apiRequest->getFields(); $sorting = $apiRequest->getSort(); $included = $apiRequest->getIncludedRelationships(); $filters = $apiRequest->getFilters(); $resource = new ListResource($this->serializer, $page, $fields, $sorting, $included, $filters); if ($filters == NULL) { $totalAmount = $this->totalAmountResourceCallable(); $results = $this->listResourceCallable(); $controllerAction = '\\' . get_called_class() . '@index'; $uri = $this->uriGenerator($controllerAction); return $this->addHeaders($resource->get($totalAmount, $results, $uri, get_class($this->getDataModel()))); } else { $improvedId = $filters['improvedParam']; $preservedId = $filters['preservedParam']; $totalAmount = function () use($improvedId, $preservedId) { $id = (new Solution())->getKeyName(); return Solution::query()->where(['improvedParam' => $improvedId, 'preservedParam' => $preservedId])->get([$id])->count(); }; $results = function () use($improvedId, $preservedId) { return EloquentHelper::paginate($this->serializer, Solution::query()->where(['improvedParam' => $improvedId, 'preservedParam' => $preservedId]))->get(); }; $params = array('improvedParam' => $improvedId, 'preservedParam' => $preservedId); $queryString = http_build_query($params); $controllerAction = '\\' . get_called_class() . '@index'; $uri = $this->uriGenerator($controllerAction); return $resource->get($totalAmount, $results, $uri, Solution::class); } }
/** * @return \Symfony\Component\HttpFoundation\Response */ public function listAction() { $resource = new ListResource($this->serializer); $totalAmount = $this->totalAmountResourceCallable(); $results = $this->listResourceCallable(); $controllerAction = '\\' . get_class($this) . '@listAction'; $uri = action($controllerAction, []); return $this->addHeaders($resource->get($totalAmount, $results, $uri, get_class($this->getDataModel()))); }
/** * @param int $pageSize * * @return \Symfony\Component\HttpFoundation\Response */ public function listAction($pageSize = 10) { $apiRequest = RequestFactory::create(); $page = $apiRequest->getPage(); if (!$page->size()) { $page->setSize($pageSize); } $resource = new ListResource($this->serializer, $page, $apiRequest->getFields(), $apiRequest->getSort(), $apiRequest->getIncludedRelationships(), $apiRequest->getFilters()); $response = $resource->get($this->totalAmountResourceCallable(), $this->listResourceCallable(), action('\\' . get_class($this) . '@listAction', []), get_class($this->getDataModel())); return $this->addHeaders($response); }
/** * @param \Exception $e * * @return \Symfony\Component\HttpFoundation\Response * * @throws \Exception */ public function getErrorResponse(\Exception $e) { if (config('app.debug')) { throw $e; } return parent::getErrorResponse($e); }
/** * Get many resources. * * @param int $pageSize * * @return \Symfony\Component\HttpFoundation\Response */ public function index($pageSize = 10) { $apiRequest = RequestFactory::create(); $page = $apiRequest->getPage(); if (!$page->size()) { $page->setSize($pageSize); } $fields = $apiRequest->getFields(); $sorting = $apiRequest->getSort(); $included = $apiRequest->getIncludedRelationships(); $filters = $apiRequest->getFilters(); $resource = new ListResource($this->serializer, $page, $fields, $sorting, $included, $filters); $totalAmount = $this->totalAmountResourceCallable(); $results = $this->listResourceCallable(); $controllerAction = '\\' . get_class($this) . '@index'; $uri = action($controllerAction, []); return $this->addHeaders($resource->get($totalAmount, $results, $uri, get_class($this->getDataModel()))); }
public function testItCanGetWillReturnErrorResponseBecauseOfInvalidParams() { $this->fields = new Fields(); $this->fields->addField('superhero', 'power'); $this->resource = new ListResource($this->serializer, $this->page, $this->fields, $this->sorting, $this->included, $this->filters); $response = $this->resource->get($this->totalAmountCallable, $this->resultsCallable, $this->routeUri, Post::class); $this->assertInstanceOf(Response::class, $response); $this->assertEquals(400, $response->getStatusCode()); }
/** * @param Request $request * * @return \Symfony\Component\HttpFoundation\Response */ public function getAuthorByBook(Request $request) { $apiRequest = RequestFactory::create(); $page = $apiRequest->getPage(); if (!$page->size()) { $page->setSize(10); //Default elements per page } $resource = new ListResource($this->serializer, $page, $apiRequest->getFields(), $apiRequest->getSort(), $apiRequest->getIncludedRelationships(), $apiRequest->getFilters()); $totalAmount = function () use($request) { $id = (new Author())->getKeyName(); return Author::query()->where('id', '=', $request->author_id)->get([$id])->count(); }; $results = function () use($request) { return EloquentHelper::paginate($this->serializer, Author::query()->where('id', '=', $request->author_id))->get(); }; $uri = route('api.authors.show', ['id' => $request->author_id]); return $resource->get($totalAmount, $results, $uri, Author::class); }
/** * @param Request $request * * @return \Symfony\Component\HttpFoundation\Response */ public function getOrdersByEmployee(Request $request) { $resource = new ListResource($this->serializer); $totalAmount = function () use($request) { $id = (new Orders())->getKeyName(); return Orders::query()->where('employee_id', '=', $request->employee_id)->get([$id])->count(); }; $results = function () use($request) { return EloquentHelper::paginate($this->serializer, Orders::query()->where('employee_id', '=', $request->employee_id))->get(); }; $uri = route('employees.orders', ['employee_id' => $request->employee_id]); return $resource->get($totalAmount, $results, $uri, Orders::class); }
/** * @param $id * * @return \Symfony\Component\HttpFoundation\Response */ public function getOrdersByEmployee($id) { $apiRequest = RequestFactory::create(); $page = $apiRequest->getPage(); if (!$page->size()) { $page->setSize($this->pageSize); } $fields = $apiRequest->getFields(); $sorting = $apiRequest->getSort(); $included = $apiRequest->getIncludedRelationships(); $filters = $apiRequest->getFilters(); $resource = new ListResource($this->serializer, $page, $fields, $sorting, $included, $filters); $totalAmount = function () use($id) { $idKey = (new Orders())->getKeyName(); return Orders::query()->where('employee_id', '=', $id)->get([$idKey])->count(); }; $results = function () use($id) { return EloquentHelper::paginate($this->serializer, Orders::query()->where('employee_id', '=', $id))->get(); }; $uri = route('employees.orders', ['employee_id' => $id]); return $resource->get($totalAmount, $results, $uri, Orders::class); }