From 133ded0684de7d047b3301ca561c0c89c4c6a5dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Klabbers?= Date: Tue, 11 Jan 2022 10:10:39 +0100 Subject: [PATCH] fixes #5 --- src/Api/Controllers/SearchController.php | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Api/Controllers/SearchController.php b/src/Api/Controllers/SearchController.php index 0cae6a9..e4a3052 100644 --- a/src/Api/Controllers/SearchController.php +++ b/src/Api/Controllers/SearchController.php @@ -13,6 +13,7 @@ use Flarum\Discussion\Discussion; use Flarum\Extension\ExtensionManager; use Flarum\Group\Group; use Flarum\Http\RequestUtil; +use Flarum\Http\UrlGenerator; use Flarum\User\User; use Illuminate\Contracts\Container\Container; use Illuminate\Support\Arr; @@ -36,7 +37,7 @@ class SearchController extends ListDiscussionsController 'commentCount' => 'comment_count' ]; - public function __construct(protected Client $elastic) + public function __construct(protected Client $elastic, protected UrlGenerator $uri) {} protected function data(ServerRequestInterface $request, Document $document) @@ -50,6 +51,9 @@ class SearchController extends ListDiscussionsController $search = $this->getSearch($filters); + $limit = $this->extractLimit($request); + $offset = $this->extractOffset($request); + $include = array_merge($this->extractInclude($request), ['state']); $filterQuery = BoolQuery::create(); @@ -66,7 +70,7 @@ class SearchController extends ListDiscussionsController $builder = (new Builder($this->elastic)) ->index(resolve('blomstra.search.elastic_index')) - ->size($this->extractLimit($request)) + ->size($limit + 1) ->from($this->extractOffset($request)) ->addQuery( $this->addFilters($filterQuery, $actor, $filters) @@ -112,6 +116,18 @@ class SearchController extends ListDiscussionsController } }); + $document->addPaginationLinks( + $this->uri->to('api')->route('blomstra.search', [ + 'type' => 'discussions' + ]), + $request->getQueryParams(), + $offset, + $limit, + $results->count() > $limit ? null : 0 + ); + + $results = $results->take($limit); + $discussions = Discussion::query() ->select('discussions.*') ->join('posts', 'posts.discussion_id', 'discussions.id')