Skip to content

Commit 31b9bf7

Browse files
committed
fix(test): apply review requested changes
1 parent fa07958 commit 31b9bf7

23 files changed

+150
-152
lines changed

src/Doctrine/Common/Filter/OpenApiFilterTrait.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,4 @@ public function getOpenApiParameters(Parameter $parameter): OpenApiParameter|arr
2525
{
2626
return new OpenApiParameter(name: $parameter->getKey().'[]', in: 'query', style: 'deepObject', explode: true);
2727
}
28-
29-
public function getDescription(string $resourceClass): array
30-
{
31-
return [];
32-
}
3328
}

src/Doctrine/Odm/Filter/ExactFilter.php

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace ApiPlatform\Doctrine\Odm\Filter;
1515

1616
use ApiPlatform\Doctrine\Common\Filter\OpenApiFilterTrait;
17+
use ApiPlatform\Metadata\BackwardCompatibleFilterDescriptionTrait;
1718
use ApiPlatform\Metadata\OpenApiParameterFilterInterface;
1819
use ApiPlatform\Metadata\Operation;
1920
use Doctrine\ODM\MongoDB\Aggregation\Builder;
@@ -23,22 +24,18 @@
2324
*/
2425
final class ExactFilter implements FilterInterface, OpenApiParameterFilterInterface
2526
{
27+
use BackwardCompatibleFilterDescriptionTrait;
2628
use OpenApiFilterTrait;
2729

2830
public function apply(Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void
2931
{
30-
if (!$parameter = $context['parameter'] ?? null) {
31-
return;
32-
}
33-
34-
$values = (array) $parameter->getValue();
35-
36-
// TODO: handle nested properties
32+
$parameter = $context['parameter'];
33+
$value = $parameter->getValue();
3734
$property = $parameter->getProperty();
3835

3936
$aggregationBuilder
4037
->match()
4138
->field($property)
42-
->in($values);
39+
->{(is_iterable($value)) ? 'in' : 'equals'}($value);
4340
}
4441
}

src/Doctrine/Odm/Filter/IriFilter.php

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace ApiPlatform\Doctrine\Odm\Filter;
1515

1616
use ApiPlatform\Doctrine\Common\Filter\OpenApiFilterTrait;
17+
use ApiPlatform\Metadata\BackwardCompatibleFilterDescriptionTrait;
1718
use ApiPlatform\Metadata\OpenApiParameterFilterInterface;
1819
use ApiPlatform\Metadata\Operation;
1920
use ApiPlatform\Metadata\ParameterProviderFilterInterface;
@@ -25,26 +26,19 @@
2526
*/
2627
final class IriFilter implements FilterInterface, OpenApiParameterFilterInterface, ParameterProviderFilterInterface
2728
{
29+
use BackwardCompatibleFilterDescriptionTrait;
2830
use OpenApiFilterTrait;
2931

3032
public function apply(Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void
3133
{
32-
if (!$parameter = $context['parameter'] ?? null) {
33-
return;
34-
}
35-
34+
$parameter = $context['parameter'];
3635
$value = $parameter->getValue();
37-
if (!\is_array($value)) {
38-
$value = [$value];
39-
}
40-
41-
// TODO: handle nested properties
4236
$property = $parameter->getProperty();
4337

4438
$aggregationBuilder
4539
->match()
4640
->field($property)
47-
->in($value);
41+
->{(is_iterable($value)) ? 'in' : 'equals'}($value);
4842
}
4943

5044
public static function getParameterProvider(): string

src/Doctrine/Odm/Filter/OrFilter.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace ApiPlatform\Doctrine\Odm\Filter;
1515

1616
use ApiPlatform\Doctrine\Common\Filter\OpenApiFilterTrait;
17+
use ApiPlatform\Metadata\BackwardCompatibleFilterDescriptionTrait;
1718
use ApiPlatform\Metadata\OpenApiParameterFilterInterface;
1819
use ApiPlatform\Metadata\Operation;
1920
use Doctrine\ODM\MongoDB\Aggregation\Builder;
@@ -23,20 +24,20 @@
2324
*/
2425
final class OrFilter implements FilterInterface, OpenApiParameterFilterInterface
2526
{
27+
use BackwardCompatibleFilterDescriptionTrait;
2628
use OpenApiFilterTrait;
29+
2730
/**
28-
* @var array<FilterInterface>
31+
* @param array<FilterInterface> $filters
2932
*/
30-
private readonly array $filters;
31-
32-
public function __construct(FilterInterface ...$filters)
33+
public function __construct(private readonly array $filters)
3334
{
34-
$this->filters = $filters;
3535
}
3636

3737
public function apply(Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void
3838
{
3939
foreach ($this->filters as $filter) {
40+
$context = ['whereClause' => 'orWhere'] + $context;
4041
$filter->apply($aggregationBuilder, $resourceClass, $operation, $context);
4142
}
4243
}

src/Doctrine/Odm/Filter/PartialSearchFilter.php

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace ApiPlatform\Doctrine\Odm\Filter;
1515

1616
use ApiPlatform\Doctrine\Common\Filter\OpenApiFilterTrait;
17+
use ApiPlatform\Metadata\BackwardCompatibleFilterDescriptionTrait;
1718
use ApiPlatform\Metadata\OpenApiParameterFilterInterface;
1819
use ApiPlatform\Metadata\Operation;
1920
use Doctrine\ODM\MongoDB\Aggregation\Builder;
@@ -24,18 +25,13 @@
2425
*/
2526
final class PartialSearchFilter implements FilterInterface, OpenApiParameterFilterInterface
2627
{
28+
use BackwardCompatibleFilterDescriptionTrait;
2729
use OpenApiFilterTrait;
2830

2931
public function apply(Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void
3032
{
31-
if (!$parameter = $context['parameter'] ?? null) {
32-
return;
33-
}
34-
33+
$parameter = $context['parameter'];
3534
$value = $parameter->getValue();
36-
if (!\is_string($value) || '' === $value) {
37-
return;
38-
}
3935

4036
// TODO: handle nested properties
4137
$property = $parameter->getProperty();

src/Doctrine/Orm/Filter/ExactFilter.php

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use ApiPlatform\Doctrine\Common\Filter\OpenApiFilterTrait;
1717
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
18+
use ApiPlatform\Metadata\BackwardCompatibleFilterDescriptionTrait;
1819
use ApiPlatform\Metadata\OpenApiParameterFilterInterface;
1920
use ApiPlatform\Metadata\Operation;
2021
use Doctrine\ORM\QueryBuilder;
@@ -24,25 +25,26 @@
2425
*/
2526
final class ExactFilter implements FilterInterface, OpenApiParameterFilterInterface
2627
{
28+
use BackwardCompatibleFilterDescriptionTrait;
2729
use OpenApiFilterTrait;
2830

2931
public function apply(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void
3032
{
31-
if (!$parameter = $context['parameter'] ?? null) {
32-
return;
33-
}
34-
33+
$parameter = $context['parameter'];
3534
$value = $parameter->getValue();
36-
if (!\is_array($value)) {
37-
$value = [$value];
38-
}
3935

4036
$property = $parameter->getProperty();
4137
$alias = $queryBuilder->getRootAliases()[0];
4238
$parameterName = $queryNameGenerator->generateParameterName($property);
4339

44-
$queryBuilder
45-
->andWhere(\sprintf('%s.%s = :%s', $alias, $property, $parameterName))
46-
->setParameter($parameterName, $value);
40+
if (\is_array($value)) {
41+
$queryBuilder
42+
->{$context['whereClause'] ?? 'andWhere'}(\sprintf('%s.%s IN (:%s)', $alias, $property, $parameterName));
43+
} else {
44+
$queryBuilder
45+
->{$context['whereClause'] ?? 'andWhere'}(\sprintf('%s.%s = :%s', $alias, $property, $parameterName));
46+
}
47+
48+
$queryBuilder->setParameter($parameterName, $value);
4749
}
4850
}

src/Doctrine/Orm/Filter/ExistsFilter.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,8 @@ public function apply(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $q
142142
return;
143143
}
144144

145-
$properties = $context['filters'][$this->existsParameterName];
146-
if ([] !== $properties) {
147-
foreach ($properties as $property => $value) {
148-
$this->filterProperty($this->denormalizePropertyName($property), $value, $queryBuilder, $queryNameGenerator, $resourceClass, $operation, $context);
149-
}
145+
foreach ($context['filters'][$this->existsParameterName] ?? [] as $property => $value) {
146+
$this->filterProperty($this->denormalizePropertyName($property), $value, $queryBuilder, $queryNameGenerator, $resourceClass, $operation, $context);
150147
}
151148
}
152149

src/Doctrine/Orm/Filter/IriFilter.php

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use ApiPlatform\Doctrine\Common\Filter\OpenApiFilterTrait;
1717
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
18+
use ApiPlatform\Metadata\BackwardCompatibleFilterDescriptionTrait;
1819
use ApiPlatform\Metadata\OpenApiParameterFilterInterface;
1920
use ApiPlatform\Metadata\Operation;
2021
use ApiPlatform\Metadata\ParameterProviderFilterInterface;
@@ -26,27 +27,30 @@
2627
*/
2728
final class IriFilter implements FilterInterface, OpenApiParameterFilterInterface, ParameterProviderFilterInterface
2829
{
30+
use BackwardCompatibleFilterDescriptionTrait;
2931
use OpenApiFilterTrait;
3032

3133
public function apply(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void
3234
{
33-
if (!$parameter = $context['parameter'] ?? null) {
34-
return;
35-
}
35+
$parameter = $context['parameter'];
3636

3737
$value = $parameter->getValue();
38-
if (!\is_array($value)) {
39-
$value = [$value];
40-
}
4138

4239
$property = $parameter->getProperty();
4340
$alias = $queryBuilder->getRootAliases()[0];
4441
$parameterName = $queryNameGenerator->generateParameterName($property);
4542

46-
$queryBuilder
47-
->join(\sprintf('%s.%s', $alias, $property), $parameterName)
48-
->andWhere(\sprintf('%s IN(:%s)', $parameterName, $parameterName))
49-
->setParameter($parameterName, $value);
43+
$queryBuilder->join(\sprintf('%s.%s', $alias, $property), $parameterName);
44+
45+
if (\is_array($value)) {
46+
$queryBuilder
47+
->{$context['whereClause'] ?? 'andWhere'}(\sprintf('%s IN (:%s)', $parameterName, $parameterName));
48+
} else {
49+
$queryBuilder
50+
->{$context['whereClause'] ?? 'andWhere'}(\sprintf('%s = :%s', $parameterName, $parameterName));
51+
}
52+
53+
$queryBuilder->setParameter($parameterName, $value);
5054
}
5155

5256
public static function getParameterProvider(): string

src/Doctrine/Orm/Filter/OrFilter.php

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,38 +15,36 @@
1515

1616
use ApiPlatform\Doctrine\Common\Filter\OpenApiFilterTrait;
1717
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
18+
use ApiPlatform\Metadata\BackwardCompatibleFilterDescriptionTrait;
1819
use ApiPlatform\Metadata\OpenApiParameterFilterInterface;
1920
use ApiPlatform\Metadata\Operation;
20-
use ApiPlatform\Metadata\ParameterProviderFilterInterface;
21-
use ApiPlatform\State\ParameterProvider\IriConverterParameterProvider;
2221
use Doctrine\ORM\QueryBuilder;
2322

2423
/**
2524
* @author Vincent Amstoutz <[email protected]>
2625
*/
27-
final class OrFilter implements FilterInterface, OpenApiParameterFilterInterface, ParameterProviderFilterInterface
26+
final class OrFilter implements FilterInterface, OpenApiParameterFilterInterface
2827
{
28+
use BackwardCompatibleFilterDescriptionTrait;
2929
use OpenApiFilterTrait;
3030

3131
/**
32-
* @var array<FilterInterface>
32+
* @param array<FilterInterface> $filters
3333
*/
34-
private readonly array $filters;
35-
36-
public function __construct(FilterInterface ...$filters)
34+
public function __construct(private readonly array $filters)
3735
{
38-
$this->filters = $filters;
3936
}
4037

4138
public function apply(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void
4239
{
4340
foreach ($this->filters as $filter) {
44-
$filter->apply($queryBuilder, $queryNameGenerator, $resourceClass, $operation, $context);
41+
$filter->apply(
42+
$queryBuilder,
43+
$queryNameGenerator,
44+
$resourceClass,
45+
$operation,
46+
['whereClause' => 'orWhere'] + $context
47+
);
4548
}
4649
}
47-
48-
public static function getParameterProvider(): string
49-
{
50-
return IriConverterParameterProvider::class;
51-
}
5250
}

src/Doctrine/Orm/Filter/PartialSearchFilter.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use ApiPlatform\Doctrine\Common\Filter\OpenApiFilterTrait;
1717
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
18+
use ApiPlatform\Metadata\BackwardCompatibleFilterDescriptionTrait;
1819
use ApiPlatform\Metadata\OpenApiParameterFilterInterface;
1920
use ApiPlatform\Metadata\Operation;
2021
use Doctrine\ORM\QueryBuilder;
@@ -24,14 +25,12 @@
2425
*/
2526
final class PartialSearchFilter implements FilterInterface, OpenApiParameterFilterInterface
2627
{
28+
use BackwardCompatibleFilterDescriptionTrait;
2729
use OpenApiFilterTrait;
2830

2931
public function apply(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void
3032
{
31-
if (!$parameter = $context['parameter'] ?? null) {
32-
return;
33-
}
34-
33+
$parameter = $context['parameter'];
3534
$value = $parameter->getValue();
3635

3736
$property = $parameter->getProperty();
@@ -40,13 +39,16 @@ public function apply(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $q
4039

4140
$parameterName = $queryNameGenerator->generateParameterName($property);
4241

42+
// TODO: handle aggregation
4343
$likeExpression = $queryBuilder->expr()->like(
4444
'LOWER('.$field.')',
4545
':'.$parameterName
4646
);
4747

4848
$queryBuilder
49-
->andWhere($likeExpression)
49+
->{$context['whereClause'] ?? 'andWhere'}($likeExpression);
50+
51+
$queryBuilder
5052
->setParameter($parameterName, '%'.strtolower($value).'%');
5153
}
5254
}

0 commit comments

Comments
 (0)