- Heavy rework on search request handling of entities
This commit is contained in:
parent
cb125545c7
commit
a9b9c2cce9
9
src/SearchRequest/Attribute/FieldValueModifier.php
Normal file
9
src/SearchRequest/Attribute/FieldValueModifier.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Ulmus\SearchRequest\Attribute;
|
||||||
|
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::IS_REPEATABLE)]
|
||||||
|
abstract class FieldValueModifier
|
||||||
|
{
|
||||||
|
public abstract function run(mixed $field) : mixed;
|
||||||
|
}
|
||||||
20
src/SearchRequest/Attribute/PropertyValueModifier/Pad.php
Normal file
20
src/SearchRequest/Attribute/PropertyValueModifier/Pad.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Ulmus\SearchRequest\Attribute\PropertyValueModifier;
|
||||||
|
|
||||||
|
use Ulmus\SearchRequest\Attribute\PropertyValueModifier;
|
||||||
|
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY)]
|
||||||
|
class Pad extends PropertyValueModifier
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
public int $length,
|
||||||
|
public string $padWith,
|
||||||
|
public int $type = \STR_PAD_RIGHT,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
public function run(mixed $value) : mixed
|
||||||
|
{
|
||||||
|
return str_pad($value, $this->length, $this->padWith, $this->type);
|
||||||
|
}
|
||||||
|
}
|
||||||
48
src/SearchRequest/ParsedSearchParameter.php
Normal file
48
src/SearchRequest/ParsedSearchParameter.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Ulmus\SearchRequest;
|
||||||
|
|
||||||
|
class ParsedSearchParameter
|
||||||
|
{
|
||||||
|
public string|\Stringable $operator;
|
||||||
|
|
||||||
|
public string|\Stringable $condition;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
public readonly SearchMethodEnum $searchMethod,
|
||||||
|
public readonly string|\Stringable $field,
|
||||||
|
public readonly mixed $value,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
public function value() : mixed{
|
||||||
|
return match ($this->searchMethod) {
|
||||||
|
SearchMethodEnum::Like => "%$this->value%",
|
||||||
|
SearchMethodEnum::LikeLeft => "%$this->value",
|
||||||
|
SearchMethodEnum::LikeRight => "$this->value%",
|
||||||
|
default => $this->value,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public function operator() : string {
|
||||||
|
if (isset($this->operator)) {
|
||||||
|
return $this->operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
return match ($this->searchMethod) {
|
||||||
|
SearchMethodEnum::Like => SearchRequestInterface::SEARCH_REQUEST_OPERATOR_LIKE,
|
||||||
|
default => SearchRequestInterface::SEARCH_REQUEST_OPERATOR_EQUAL,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function condition() : string {
|
||||||
|
if (isset($this->condition)) {
|
||||||
|
return $this->condition;
|
||||||
|
}
|
||||||
|
|
||||||
|
return match ($this->searchMethod) {
|
||||||
|
SearchMethodEnum::Like => SearchRequestInterface::SEARCH_REQUEST_CONDITION_OR,
|
||||||
|
default => SearchRequestInterface::SEARCH_REQUEST_CONDITION_AND,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user