This commit is contained in:
Daniël Klabbers 2022-01-11 10:10:39 +01:00
parent 803d1ecfc5
commit 133ded0684
1 changed files with 18 additions and 2 deletions

View File

@ -13,6 +13,7 @@ use Flarum\Discussion\Discussion;
use Flarum\Extension\ExtensionManager; use Flarum\Extension\ExtensionManager;
use Flarum\Group\Group; use Flarum\Group\Group;
use Flarum\Http\RequestUtil; use Flarum\Http\RequestUtil;
use Flarum\Http\UrlGenerator;
use Flarum\User\User; use Flarum\User\User;
use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Container\Container;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
@ -36,7 +37,7 @@ class SearchController extends ListDiscussionsController
'commentCount' => 'comment_count' '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) protected function data(ServerRequestInterface $request, Document $document)
@ -50,6 +51,9 @@ class SearchController extends ListDiscussionsController
$search = $this->getSearch($filters); $search = $this->getSearch($filters);
$limit = $this->extractLimit($request);
$offset = $this->extractOffset($request);
$include = array_merge($this->extractInclude($request), ['state']); $include = array_merge($this->extractInclude($request), ['state']);
$filterQuery = BoolQuery::create(); $filterQuery = BoolQuery::create();
@ -66,7 +70,7 @@ class SearchController extends ListDiscussionsController
$builder = (new Builder($this->elastic)) $builder = (new Builder($this->elastic))
->index(resolve('blomstra.search.elastic_index')) ->index(resolve('blomstra.search.elastic_index'))
->size($this->extractLimit($request)) ->size($limit + 1)
->from($this->extractOffset($request)) ->from($this->extractOffset($request))
->addQuery( ->addQuery(
$this->addFilters($filterQuery, $actor, $filters) $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() $discussions = Discussion::query()
->select('discussions.*') ->select('discussions.*')
->join('posts', 'posts.discussion_id', 'discussions.id') ->join('posts', 'posts.discussion_id', 'discussions.id')