134 lines
3.4 KiB
PHP
134 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\User;
|
|
use App\Models\Events;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Typesense\Client;
|
|
|
|
class TypesenseService
|
|
{
|
|
protected Client $client;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->client = new Client([
|
|
'api_key' => config('app.typesense_api_key'),
|
|
'nodes' => [
|
|
[
|
|
'host' => config('app.typesense_connection'),
|
|
'port' => '8108',
|
|
'protocol' => 'http',
|
|
],
|
|
],
|
|
]);
|
|
}
|
|
|
|
|
|
private function ensureCollectionsExist(): void
|
|
{
|
|
static $checked = false;
|
|
|
|
if ($checked) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
$collections = $this->client->collections->retrieve();
|
|
$names = array_column($collections, 'name');
|
|
|
|
if (!in_array('events', $names)) {
|
|
$this->client->collections->create([
|
|
'name' => 'events',
|
|
'fields' => [
|
|
['name' => 'name', 'type' => 'string'],
|
|
['name' => 'description', 'type' => 'string'],
|
|
],
|
|
]);
|
|
}
|
|
|
|
if (!in_array('users', $names)) {
|
|
$this->client->collections->create([
|
|
'name' => 'users',
|
|
'fields' => [
|
|
['name' => 'name', 'type' => 'string'],
|
|
['name' => 'lastname', 'type' => 'string'],
|
|
['name' => 'validate', 'type' => 'bool'],
|
|
],
|
|
]);
|
|
}
|
|
|
|
$checked = true;
|
|
} catch (\Throwable $e) {
|
|
report($e);
|
|
}
|
|
}
|
|
|
|
public function upsertEvent(Events $event): void
|
|
{
|
|
$this->ensureCollectionsExist();
|
|
|
|
try {
|
|
$this->client->collections['events']
|
|
->documents
|
|
->upsert([
|
|
'id' => (string) $event->id,
|
|
'name' => $event->name,
|
|
'description' => $event->description,
|
|
]);
|
|
} catch (\Throwable $e) {
|
|
report($e);
|
|
}
|
|
}
|
|
|
|
public function deleteEvent(int $eventId): void
|
|
{
|
|
$this->ensureCollectionsExist();
|
|
|
|
try {
|
|
$this->client->collections['events']
|
|
->documents[(string) $eventId]
|
|
->delete();
|
|
} catch (\Throwable $e) {
|
|
report($e);
|
|
}
|
|
}
|
|
|
|
public function upsertUser(User $user): void
|
|
{
|
|
$this->ensureCollectionsExist();
|
|
|
|
if (!$user->validate) {
|
|
$this->deleteUser($user->id);
|
|
return;
|
|
}
|
|
|
|
try {
|
|
$this->client->collections['users']
|
|
->documents
|
|
->upsert([
|
|
'id' => (string) $user->id,
|
|
'name' => $user->name,
|
|
'lastname' => $user->lastname,
|
|
'validate' => true,
|
|
]);
|
|
} catch (\Throwable $e) {
|
|
report($e);
|
|
}
|
|
}
|
|
|
|
public function deleteUser(int $userId): void
|
|
{
|
|
$this->ensureCollectionsExist();
|
|
|
|
try {
|
|
$this->client->collections['users']
|
|
->documents[(string) $userId]
|
|
->delete();
|
|
} catch (\Throwable $e) {
|
|
report($e);
|
|
}
|
|
}
|
|
}
|