-
Notifications
You must be signed in to change notification settings - Fork 61
/
SearchController.php
37 lines (30 loc) · 1.08 KB
/
SearchController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
namespace App\Http\Controllers\Api;
use Algolia\AlgoliaSearch\SearchIndex;
use App\CacheKeys;
use App\Http\Controllers\Controller;
use App\Http\Resources\Package as PackageResource;
use App\Package;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
class SearchController extends Controller
{
const CACHE_LENGTH = 10;
public function __invoke(Request $request)
{
$this->validate($request, [
'q' => 'required|min:3',
]);
Log::info('API: search for: '.$request->input('q'));
return PackageResource::collection($this->searchFor($request->input('q')));
}
private function searchFor($q)
{
return Cache::remember(CacheKeys::packageSearchResults($q), self::CACHE_LENGTH, function () use ($q) {
return Package::search($q, function (SearchIndex $algolia, string $query, array $options) {
return $algolia->search($query, array_merge($options, ['advancedSyntax' => true]));
})->get()->load(['tags', 'author']);
});
}
}