From b38b81d03cec4931de44887ca3756d392adae4f1 Mon Sep 17 00:00:00 2001 From: Dave M Date: Mon, 22 Apr 2024 13:54:48 +0000 Subject: [PATCH] - Still WIP on SearchRequest attributes migration --- src/EntityTrait.php | 3 +- src/SearchRequest/Attribute/SearchGroupBy.php | 2 -- .../Attribute/SearchRequestParameter.php | 1 + .../SearchRequestFromRequestTrait.php | 35 +++++++++++++++---- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/EntityTrait.php b/src/EntityTrait.php index 7ac223d..fafd3f6 100644 --- a/src/EntityTrait.php +++ b/src/EntityTrait.php @@ -324,7 +324,6 @@ trait EntityTrait { #[Ignore] public static function field($name, null|string|false $alias = Repository::DEFAULT_ALIAS) : EntityField { - $default = ( $alias === false ? '' : Repository::DEFAULT_ALIAS ); # bw compatibility, to be deprecated return new EntityField(static::class, $name, $alias ? Ulmus::repository(static::class)->adapter->adapter()->escapeIdentifier($alias, Adapter\AdapterInterface::IDENTIFIER_FIELD) : $default, Ulmus::resolveEntity(static::class)); @@ -341,7 +340,7 @@ trait EntityTrait { #[Ignore] public static function searchRequest(...$arguments) : SearchRequestInterface { - return new #[SearchRequest\Attribute\SearchRequestParameter(self::class)] class(... $arguments) extends SearchRequest\SearchRequest { + return new /* #[SearchRequest\Attribute\SearchRequestParameter(YourEntityClass::class)] */ class(... $arguments) extends SearchRequest\SearchRequest { # Define searchable properties here, some ex: # #[SearchParameter(method: SearchMethodEnum::Where)] diff --git a/src/SearchRequest/Attribute/SearchGroupBy.php b/src/SearchRequest/Attribute/SearchGroupBy.php index 235516c..162022b 100644 --- a/src/SearchRequest/Attribute/SearchGroupBy.php +++ b/src/SearchRequest/Attribute/SearchGroupBy.php @@ -8,8 +8,6 @@ use Ulmus\SearchRequest\SearchMethodEnum; class SearchGroupBy extends SearchParameter { public function __construct( - public ? string $parameter = null, public null|string|\Stringable|array $field = null, - public SearchMethodEnum $method = SearchMethodEnum::GroupBy, ) {} } \ No newline at end of file diff --git a/src/SearchRequest/Attribute/SearchRequestParameter.php b/src/SearchRequest/Attribute/SearchRequestParameter.php index e30af06..fa430ee 100644 --- a/src/SearchRequest/Attribute/SearchRequestParameter.php +++ b/src/SearchRequest/Attribute/SearchRequestParameter.php @@ -9,5 +9,6 @@ class SearchRequestParameter { public function __construct( public string $class, + public ? string $alias = null, ) {} } \ No newline at end of file diff --git a/src/SearchRequest/SearchRequestFromRequestTrait.php b/src/SearchRequest/SearchRequestFromRequestTrait.php index d489221..7ad7bdf 100644 --- a/src/SearchRequest/SearchRequestFromRequestTrait.php +++ b/src/SearchRequest/SearchRequestFromRequestTrait.php @@ -3,10 +3,8 @@ namespace Ulmus\SearchRequest; use Psr\Http\Message\ServerRequestInterface; -use Ulmus\SearchRequest\Attribute\SearchGroupBy; -use Ulmus\SearchRequest\Attribute\SearchOrderBy; -use Ulmus\SearchRequest\Attribute\SearchParameter; -use Ulmus\SearchRequest\Attribute\SearchWhere; + +use Ulmus\SearchRequest\Attribute\{ SearchParameter, SearchWhere, SearchOrderBy, SearchGroupBy, SearchRequestParameter, }; trait SearchRequestFromRequestTrait { @@ -38,7 +36,20 @@ trait SearchRequestFromRequestTrait $fieldName = $attribute->field ?? $propertyName; $queryParamName = $attribute->parameter ?? $propertyName; - $field = \Ulmus\Attribute\Attribute::handleArrayField($fieldName, false);; + # Field could be defined for another entity class + if (is_array($fieldName)) { + $field = \Ulmus\Attribute\Attribute::handleArrayField($fieldName, false); + } + # Default class using it, if SearchRequestParameter is defined + elseif ($classAttributes = $classReflection->getAttributes(SearchRequestParameter::class)) { + $searchRequestAttribute = $classAttributes[0]->newInstance(); + $className = $searchRequestAttribute->class; + $field = $className::field($fieldName, $searchRequestAttribute->alias); + } + # Untouched string from the attribute + else { + $field = $fieldName; + } $value = $queryParams->offsetExists($queryParamName) ? $this->transformValue($attributeList, $queryParams[$queryParamName]) : null; @@ -57,7 +68,10 @@ trait SearchRequestFromRequestTrait $this->$propertyName = $value; } - $this->parseAttributeDefaultOrder($attribute, $field, $propertyName); + $this->parseAttributeOrderBy($attribute, $field, $propertyName); + } + elseif ($attribute instanceof SearchGroupBy) { + $this->parseAttributeGroupBy($attribute, $field, $propertyName); } } } @@ -104,11 +118,18 @@ trait SearchRequestFromRequestTrait } } - protected function parseAttributeDefaultOrder(object $attribute, string $field, mixed $propertyName,) : void + protected function parseAttributeOrderBy(object $attribute, string $field, mixed $propertyName,) : void { $this->orders[$field] = $this->$propertyName; } + protected function parseAttributeGroupBy(object $attribute, string $field, mixed $propertyName,) : void + { + if (! empty($this->$propertyName)) { + $this->groups[] = $field; + } + } + # @TODO ! /* protected function parseAttributeGroupBy(object $attribute, string $field, string $propertyName,) : void {