68 lines
2.0 KiB
PHP
68 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace SlotDb\Client;
|
|
|
|
use GuzzleHttp\Psr7\Request;
|
|
use Psr\Http\Client\ClientInterface;
|
|
use Psr\Http\Message\ResponseInterface;
|
|
|
|
class SlotDbClient
|
|
{
|
|
private string $server = "http://127.0.0.1:8080";
|
|
|
|
public function __construct(
|
|
private readonly ClientInterface $client
|
|
)
|
|
{
|
|
|
|
}
|
|
|
|
private function get(string $path, array $query = [], array $headers = []): ResponseInterface
|
|
{
|
|
$queryStr = \http_build_query($query);
|
|
$fullPath = $this->server . '/api/slotdb/v1/' . ltrim($path, '/') . '?' . $queryStr;
|
|
$request = new Request('GET', $fullPath, $headers);
|
|
return $this->client->sendRequest($request);
|
|
}
|
|
|
|
private function post(string $path, array $data, array $query = [], array $headers = []): ResponseInterface
|
|
{
|
|
$queryStr = \http_build_query($query);
|
|
$fullPath = $this->server . '/api/slotdb/v1/' . ltrim($path, '/') . '?' . $queryStr;
|
|
$headers['content-type'] ??= 'application/json';
|
|
$request = new Request('POST', $fullPath, $headers, json_encode($data));
|
|
return $this->client->sendRequest($request);
|
|
}
|
|
|
|
public function querySlot(string $slotId): array
|
|
{
|
|
$res = $this->get("/slot/{$slotId}");
|
|
$data = json_decode($res->getBody(), true);
|
|
return $data;
|
|
}
|
|
|
|
public function updateSlot(string $slotId, array $props): array
|
|
{
|
|
$res = $this->post("/slot/{$slotId}", data: $props);
|
|
$data = json_decode($res->getBody(), true);
|
|
return $data;
|
|
}
|
|
|
|
public function findSlots(array $where = [], array $what = [], int $limit = 250, int $page = 0): array
|
|
{
|
|
$query = [
|
|
'limit' => $limit,
|
|
'page' => $page,
|
|
'get' => join(",",$what),
|
|
];
|
|
foreach ($where as $prop=>$cond) {
|
|
$whereCond = "{$prop}:{$cond}";
|
|
$query['where[]'] = $whereCond;
|
|
}
|
|
$res = $this->get("/slots", $query);
|
|
$data = json_decode($res->getBody(), true);
|
|
return $data;
|
|
}
|
|
|
|
}
|