/** * 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); } }
/** * @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 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); }
/** * Returns a list of resources based on pagination criteria. * * @return callable * @codeCoverageIgnore */ protected function listResourceCallable() { return function () { return EloquentHelper::paginate($this->serializer, $this->getDataModel()->query())->get(); }; }
/** * @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); }