- Added some more functionnality to API's connector

This commit is contained in:
Dave Mc Nicoll 2024-12-02 15:24:26 -05:00
parent 98c608dfba
commit 6d7701cfe5
3 changed files with 37 additions and 40 deletions

View File

@ -5,7 +5,6 @@ namespace Ulmus\Api;
use Psr\Http\Message\RequestInterface; use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UriInterface; use Psr\Http\Message\UriInterface;
use Ulmus\Api\Attribute\Obj\Api\ApiAction; use Ulmus\Api\Attribute\Obj\Api\ApiAction;
use Ulmus\Api\Common\MethodEnum; use Ulmus\Api\Common\MethodEnum;
@ -15,7 +14,6 @@ use Ulmus\Api\SearchRequest\ApiSearchRequest;
use Ulmus\Api\Stream\JsonStream; use Ulmus\Api\Stream\JsonStream;
use Ulmus\Api\Stream\Stream; use Ulmus\Api\Stream\Stream;
use Ulmus\Api\Request\JsonRequest; use Ulmus\Api\Request\JsonRequest;
use Ulmus\Api\Request\Request;
use Ulmus\Api\Transport\CurlClient; use Ulmus\Api\Transport\CurlClient;
use Ulmus\Api\Transport\CurlTransport; use Ulmus\Api\Transport\CurlTransport;
use Ulmus\EntityCollection; use Ulmus\EntityCollection;
@ -213,7 +211,7 @@ class ApiRepository extends \Ulmus\Repository
$this->adapter->apiHandler->debugResponse($transport, $this); $this->adapter->apiHandler->debugResponse($transport, $this);
} }
} }
/*
public function collectionFromQuery(? string $entityClass = null) : EntityCollection public function collectionFromQuery(? string $entityClass = null) : EntityCollection
{ {
$entityClass ??= $this->entityClass; $entityClass ??= $this->entityClass;
@ -229,10 +227,10 @@ class ApiRepository extends \Ulmus\Repository
$entityCollection->append( $entity->resetVirtualProperties()->entityFillFromDataset($entityData) ); $entityCollection->append( $entity->resetVirtualProperties()->entityFillFromDataset($entityData) );
} }
$this->eventExecute(\Ulmus\Event\Repository\CollectionFromQueryInterface::class, $entityCollection); $this->eventExecute(\Ulmus\Event\Repository\CollectionFromQueryInterface::class, $this, $entityCollection);
return $entityCollection; return $entityCollection;
} }*/
public function filterServerRequest(SearchRequestInterface $searchRequest, bool $count = true) : \Ulmus\Repository public function filterServerRequest(SearchRequestInterface $searchRequest, bool $count = true) : \Ulmus\Repository
{ {

View File

@ -4,6 +4,7 @@ namespace Ulmus\Api;
use Psr\Http\Message\RequestInterface; use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
use Psr\SimpleCache\CacheInterface;
use Ulmus\Adapter\AdapterInterface; use Ulmus\Adapter\AdapterInterface;
use Ulmus\Api\Request\JsonRequest; use Ulmus\Api\Request\JsonRequest;
use Ulmus\Api\Response\JsonResponse; use Ulmus\Api\Response\JsonResponse;
@ -12,24 +13,20 @@ use Ulmus\Ulmus;
class ConnectionAdapter extends \Ulmus\ConnectionAdapter class ConnectionAdapter extends \Ulmus\ConnectionAdapter
{ {
public string $name;
public array $configuration;
protected AdapterInterface $adapter; protected AdapterInterface $adapter;
private array $connection; private array $connection;
public readonly ApiHandlerInterface $apiHandler; public function __construct(
public readonly ApiHandlerInterface $apiHandler,
public function __construct(ApiHandlerInterface $apiHandler, $name = "default", array $configuration = [], bool $default = false) public string $name = "default",
{ protected array $configuration = [],
public bool $default = false,
public ? CacheInterface $cacheObject = null
) {
parent::__construct($name, $configuration, $default); parent::__construct($name, $configuration, $default);
$this->apiHandler = $apiHandler;
} }
public function resolveConfiguration(): void public function resolveConfiguration(): void
{ {
$connection = $this->configuration['connections'][$this->name] ?? []; $connection = $this->configuration['connections'][$this->name] ?? [];

View File

@ -16,6 +16,12 @@ class RequestBuilder implements Ulmus\QueryBuilder\QueryBuilderInterface
protected array $queryParamStack = []; protected array $queryParamStack = [];
protected ? string $limitQueryField = "limit";
protected ? string $offsetQueryField = "offset";
protected ? string $pageQueryField = "page";
public function values(array $dataset) : self public function values(array $dataset) : self
{ {
$this->addValues(array_values($dataset)); $this->addValues(array_values($dataset));
@ -23,7 +29,7 @@ class RequestBuilder implements Ulmus\QueryBuilder\QueryBuilderInterface
return $this; return $this;
} }
public function where(\Stringable|string $field, mixed $value,) : self public function filter(\Stringable|string $field, mixed $value,) : self
{ {
if ( empty($this->filters) && ! $this->getFragment(RequestBuilder\Filter::class) ) { if ( empty($this->filters) && ! $this->getFragment(RequestBuilder\Filter::class) ) {
$this->filters = new RequestBuilder\Filter(); $this->filters = new RequestBuilder\Filter();
@ -35,6 +41,11 @@ class RequestBuilder implements Ulmus\QueryBuilder\QueryBuilderInterface
return $this; return $this;
} }
public function where(\Stringable|string $field, mixed $value,) : self
{
return $this->filter($field, $value);
}
public function bindUrl(\Stringable|string $field, mixed $value,) : self public function bindUrl(\Stringable|string $field, mixed $value,) : self
{ {
if ( empty($this->urlParameters) && ! $this->getFragment(RequestBuilder\UrlParameter::class) ) { if ( empty($this->urlParameters) && ! $this->getFragment(RequestBuilder\UrlParameter::class) ) {
@ -47,39 +58,25 @@ class RequestBuilder implements Ulmus\QueryBuilder\QueryBuilderInterface
return $this; return $this;
} }
/*public function notWhere($field, mixed $value) : self
{
return $this->filters($field, $value);
}*/
public function limit(int $value) : self public function limit(int $value) : self
{ {
/*if ( null === $limit = $this->getFragment(Ulmus\Query\Limit::class) ) { return is_null($this->limitQueryField) ? $this : $this->filter($this->limitQueryField, $value);
$limit = new Query\Limit();
$this->push($limit);
}
$limit->set($value);
*/
return $this;
} }
public function offset(int $value) : self public function offset(int $value) : self
{ {
/*if ( null === $offset = $this->getFragment(Ulmus\Query\Offset::class) ) { return is_null($this->offsetQueryField) ? $this : $this->filter($this->offsetQueryField, $value);
$offset = new Ulmus\Query\Offset();
$this->push($offset);
} }
$offset->set($value);*/ public function page(int $value) : self
{
return $this; return is_null($this->pageQueryField) ? $this : $this->filter($this->pageQueryField, $value);
} }
public function orderBy(string $field, ? string $direction = null) : self public function orderBy(string $field, ? string $direction = null) : self
{ {
return $this; return $this->where($field, $direction);
} }
public function push(QueryFragmentInterface $queryFragment) : self public function push(QueryFragmentInterface $queryFragment) : self
@ -136,4 +133,9 @@ class RequestBuilder implements Ulmus\QueryBuilder\QueryBuilderInterface
{ {
return $this->render(); return $this->render();
} }
public function hashSerializedQuery(): string
{
return "UNSUPPORTED";
}
} }