. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Services\SearchService; use Illuminate\Support\Collection; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use function response; /** * Autocomplete handler */ abstract class AbstractAutocompleteHandler implements RequestHandlerInterface { // The client software only shows the first few results protected const LIMIT = 10; // Tell the browser to cache the results protected const CACHE_LIFE = 1200; protected SearchService $search_service; /** * @param SearchService $search_service */ public function __construct(SearchService $search_service) { $this->search_service = $search_service; } /** * @param ServerRequestInterface $request * * @return ResponseInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { $data = $this->search($request) ->map(static function (string $datum): array { return ['value' => $datum]; }); return response($data) ->withHeader('Cache-Control', 'public,max-age=' . static::CACHE_LIFE); } /** * @param ServerRequestInterface $request * * @return Collection */ abstract protected function search(ServerRequestInterface $request): Collection; }