X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/b546098b365b611b34c004e120c543efb9311d2e..refs/pull/3784/head:/app/Http/Controllers/Api/SearchApiController.php diff --git a/app/Http/Controllers/Api/SearchApiController.php b/app/Http/Controllers/Api/SearchApiController.php index ba960b9d2..bf59ec671 100644 --- a/app/Http/Controllers/Api/SearchApiController.php +++ b/app/Http/Controllers/Api/SearchApiController.php @@ -2,14 +2,17 @@ namespace BookStack\Http\Controllers\Api; +use BookStack\Api\ApiEntityListFormatter; use BookStack\Entities\Models\Entity; -use BookStack\Entities\Tools\SearchOptions; -use BookStack\Entities\Tools\SearchRunner; +use BookStack\Search\SearchOptions; +use BookStack\Search\SearchResultsFormatter; +use BookStack\Search\SearchRunner; use Illuminate\Http\Request; class SearchApiController extends ApiController { - protected $searchRunner; + protected SearchRunner $searchRunner; + protected SearchResultsFormatter $resultsFormatter; protected $rules = [ 'all' => [ @@ -19,9 +22,10 @@ class SearchApiController extends ApiController ], ]; - public function __construct(SearchRunner $searchRunner) + public function __construct(SearchRunner $searchRunner, SearchResultsFormatter $resultsFormatter) { $this->searchRunner = $searchRunner; + $this->resultsFormatter = $resultsFormatter; } /** @@ -45,20 +49,19 @@ class SearchApiController extends ApiController $count = min(intval($request->get('count', '0')) ?: 20, 100); $results = $this->searchRunner->searchEntities($options, 'all', $page, $count); + $this->resultsFormatter->format($results['results']->all(), $options); - /** @var Entity $result */ - foreach ($results['results'] as $result) { - $result->setVisible([ - 'id', 'name', 'slug', 'book_id', - 'chapter_id', 'draft', 'template', - 'created_at', 'updated_at', - 'tags', 'type', - ]); - $result->setAttribute('type', $result->getType()); - } + $data = (new ApiEntityListFormatter($results['results']->all())) + ->withType()->withTags() + ->withField('preview_html', function (Entity $entity) { + return [ + 'name' => (string) $entity->getAttribute('preview_name'), + 'content' => (string) $entity->getAttribute('preview_content'), + ]; + })->format(); return response()->json([ - 'data' => $results['results'], + 'data' => $data, 'total' => $results['total'], ]); }