update SearchController

This commit is contained in:
2026-02-10 15:28:04 +01:00
parent 4acb8ad001
commit 64455066a8
+23 -131
View File
@@ -2,12 +2,9 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Typesense\Client; use Typesense\Client;
use Exception; use Exception;
use App\Models\Events;
class SearchController extends Controller class SearchController extends Controller
{ {
@@ -27,147 +24,42 @@ class SearchController extends Controller
]); ]);
} }
private function createEventsCollection()
{
try {
$collections = $this->client->collections->retrieve();
if (!in_array('events', array_column($collections, 'name'))) {
$this->client->collections->create([
'name' => 'events',
'fields' => [
['name' => 'name', 'type' => 'string'],
['name' => 'description', 'type' => 'string'],
],
]);
}
} catch (Exception $e) {
throw new Exception("Error while creating the events collection : " . $e->getMessage());
}
}
private function indexEvents()
{
try {
$events = Events::all();
foreach ($events as $event) {
$this->client->collections['events']->documents->upsert([
'id' => (string) $event->id,
'name' => $event->name,
'description' => $event->description,
]);
}
} catch (Exception $e) {
throw new Exception("Error while indexing events : " . $e->getMessage());
}
}
public function searchEvents(Request $request) public function searchEvents(Request $request)
{ {
try { try {
try {
$this->client->collections['events']->delete();
} catch (\Exception $e) {
// ignore si la collection n'existe pas
}
$this->createEventsCollection();
$this->indexEvents();
$query = $request->input('query', ''); $query = $request->input('query', '');
return response()->json(
$searchResults = $this->client->collections['events']->documents->search([ $this->client->collections['events']
'q' => $query, ->documents
'query_by' => 'name,description', ->search([
]); 'q' => $query,
'query_by' => 'name,description',
return response()->json($searchResults); ])
);
} catch (Exception $e) { } catch (Exception $e) {
return response()->json(['error' => $e->getMessage()], 500); return response()->json([
'error' => $e->getMessage()
], 500);
} }
} }
private function createUsersCollection()
{
try {
$collections = $this->client->collections->retrieve();
if (!in_array('users', array_column($collections, 'name'))) {
$this->client->collections->create([
'name' => 'users',
'fields' => [
['name' => 'name', 'type' => 'string'],
['name' => 'lastname', 'type' => 'string'],
['name' => 'validate', 'type' => 'bool'],
],
]);
}
} catch (Exception $e) {
throw new Exception("Error while creating the users collection : " . $e->getMessage());
}
}
private function indexUsers()
{
try {
$users = User::where('validate', 1)->get();
foreach ($users as $user) {
$this->client->collections['users']->documents->upsert([
'id' => (string) $user->id,
'name' => $user->name,
'lastname' => $user->lastname,
'validate' => (bool) $user->validate,
]);
}
} catch (Exception $e) {
throw new Exception("Error while indexing users : " . $e->getMessage());
}
}
public function searchUsers(Request $request) public function searchUsers(Request $request)
{ {
try { try {
try {
$this->client->collections['users']->delete();
} catch (\Exception $e) {
// ignore si la collection n'existe pas
}
$this->createUsersCollection();
$this->indexUsers();
$query = $request->input('query', ''); $query = $request->input('query', '');
return response()->json(
$searchResults = $this->client->collections['users']->documents->search([ $this->client->collections['users']
'q' => $query, ->documents
'query_by' => 'name,lastname', ->search([
'filter_by' => 'validate:=true', 'q' => $query,
]); 'query_by' => 'name,lastname',
'filter_by' => 'validate:=true',
return response()->json($searchResults); ])
);
} catch (Exception $e) { } catch (Exception $e) {
return response()->json(['error' => $e->getMessage()], 500); return response()->json([
'error' => $e->getMessage()
], 500);
} }
} }
} }