- Heavy rework on search request handling of entities

This commit is contained in:
Dev 2025-12-02 00:15:26 +00:00
parent cb125545c7
commit a9b9c2cce9
3 changed files with 77 additions and 0 deletions

View 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;
}

View 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);
}
}

View 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,
};
}
}