Skip to content
Snippets Groups Projects
Commit 969d12a5 authored by Pavel's avatar Pavel
Browse files

Merge branch 'feature_query' into 'main'

Feature query

See merge request piligrimov/search-dc!1
parents 6c947852 ddfcc78e
Branches main
No related merge requests found
......@@ -2,23 +2,23 @@
namespace IQDEV\Search;
use IQDEV\Search\Filter\FilterGroupCollection;
use IQDEV\Search\Filter\FilterCollection;
use IQDEV\Search\Order\OrderCollection;
final class Criteria
{
private FilterGroupCollection $filters;
private FilterCollection $filters;
private OrderCollection $sorting;
private Pagination $pagination;
public function __construct()
{
$this->filters = new FilterGroupCollection();
$this->filters = new FilterCollection();
$this->sorting = new OrderCollection();
$this->pagination = new Pagination();
}
public function filters(): FilterGroupCollection
public function filters(): FilterCollection
{
return $this->filters;
}
......
......@@ -4,11 +4,17 @@ namespace IQDEV\Search\Filter;
use Ramsey\Collection\AbstractCollection;
/**
* @method self add(FilterGroupCollection $item)
*/
class FilterCollection extends AbstractCollection
{
/** @var LogicOperator Тип логической операции для коллекции */
protected LogicOperator $type;
/**
* @param FilterGroupCollection[] $data
*/
public function __construct(array $data = [])
{
parent::__construct($data);
......@@ -20,7 +26,7 @@ class FilterCollection extends AbstractCollection
*/
public function getType(): string
{
return Filter::class;
return FilterGroupCollection::class;
}
/**
......
......@@ -4,6 +4,9 @@ namespace IQDEV\Search\Filter;
use Ramsey\Collection\AbstractCollection;
/**
* @method bool add(Filter $item)
*/
class FilterGroupCollection extends AbstractCollection
{
/** @var LogicOperator Тип логической операции для коллекции */
......@@ -11,11 +14,14 @@ class FilterGroupCollection extends AbstractCollection
/** @var FilterType Тип фильтра для коллекции */
protected FilterType $filterType;
/**
* @param Filter[] $data
*/
public function __construct(array $data = [])
{
parent::__construct($data);
$this->type = new LogicOperator(LogicOperator::AND);
$this->filterType = new FilterType(FilterType::FILTER);
$this->filterType = FilterType::post();
}
/**
......@@ -23,7 +29,7 @@ class FilterGroupCollection extends AbstractCollection
*/
public function getType(): string
{
return FilterCollection::class;
return Filter::class;
}
/**
......
......@@ -2,12 +2,16 @@
namespace IQDEV\Search\Filter;
/**
* @method static self query()
* @method static self post()
*/
final class FilterType
{
/**
* Тип пост фильтрации по свойствам
* Тип пост фильтрации
*/
public const FILTER = 'filter';
public const POST = 'post';
/**
* Тип полной фильтрации
*/
......@@ -34,8 +38,15 @@ final class FilterType
public static function toArray(): array
{
return [
self::FILTER,
self::POST,
self::QUERY
];
}
public static function __callStatic($method, $arguments)
{
if (in_array($method, self::toArray())) {
return new self($method);
}
}
}
......@@ -2,6 +2,10 @@
namespace IQDEV\Search\Filter;
/**
* @method static self and()
* @method static self or()
*/
final class LogicOperator
{
public const AND = 'AND';
......@@ -32,4 +36,12 @@ final class LogicOperator
self::OR
];
}
public static function __callStatic($method, $arguments)
{
$method = strtoupper($method);
if (in_array($method, self::toArray())) {
return new self($method);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment