Skip to content

Commit d258273

Browse files
committed
human review
1 parent b0c1b14 commit d258273

4 files changed

Lines changed: 19 additions & 38 deletions

File tree

src/Doctrine/Odm/Filter/ComparisonFilter.php

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ final class ComparisonFilter implements FilterInterface, OpenApiParameterFilterI
4646
'lte' => 'lte',
4747
];
4848

49-
public const ALLOWED_COMPARISON_METHODS = ['equals', 'gt', 'gte', 'lt', 'lte'];
50-
5149
public function __construct(private readonly FilterInterface $filter)
5250
{
5351
}
@@ -87,19 +85,21 @@ public function getOpenApiParameters(Parameter $parameter): array
8785
{
8886
$in = $parameter instanceof QueryParameter ? 'query' : 'header';
8987
$key = $parameter->getKey();
90-
$schema = $this->getInnerSchema($parameter);
9188

9289
return [
93-
new OpenApiParameter(name: "{$key}[gt]", in: $in, schema: $schema),
94-
new OpenApiParameter(name: "{$key}[gte]", in: $in, schema: $schema),
95-
new OpenApiParameter(name: "{$key}[lt]", in: $in, schema: $schema),
96-
new OpenApiParameter(name: "{$key}[lte]", in: $in, schema: $schema),
90+
new OpenApiParameter(name: "{$key}[gt]", in: $in),
91+
new OpenApiParameter(name: "{$key}[gte]", in: $in),
92+
new OpenApiParameter(name: "{$key}[lt]", in: $in),
93+
new OpenApiParameter(name: "{$key}[lte]", in: $in),
9794
];
9895
}
9996

10097
public function getSchema(Parameter $parameter): array
10198
{
102-
$innerSchema = $this->getInnerSchema($parameter);
99+
$innerSchema = ['type' => 'string'];
100+
if ($this->filter instanceof JsonSchemaFilterInterface) {
101+
$innerSchema = $this->filter->getSchema($parameter);
102+
}
103103

104104
return [
105105
'type' => 'object',
@@ -130,13 +130,4 @@ private function applyOperator(Builder $aggregationBuilder, string $resourceClas
130130
$context['match'] = $newContext['match'];
131131
}
132132
}
133-
134-
private function getInnerSchema(Parameter $parameter): array
135-
{
136-
if ($this->filter instanceof JsonSchemaFilterInterface) {
137-
return $this->filter->getSchema($parameter);
138-
}
139-
140-
return ['type' => 'string'];
141-
}
142133
}

src/Doctrine/Odm/Filter/ExactFilter.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,6 @@ public function apply(Builder $aggregationBuilder, string $resourceClass, ?Opera
6262

6363
if (!$classMetadata->hasReference($property)) {
6464
$comparisonMethod = $context['comparisonMethod'] ?? (is_iterable($value) ? 'in' : 'equals');
65-
if (!\in_array($comparisonMethod, ComparisonFilter::ALLOWED_COMPARISON_METHODS, true) && 'in' !== $comparisonMethod) {
66-
throw new InvalidArgumentException(\sprintf('Unsupported comparison method "%s".', $comparisonMethod));
67-
}
6865
$match
6966
->{$operator}($aggregationBuilder->matchExpr()->field($property)->{$comparisonMethod}($value));
7067

src/Doctrine/Orm/Filter/ComparisonFilter.php

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -85,19 +85,21 @@ public function getOpenApiParameters(Parameter $parameter): array
8585
{
8686
$in = $parameter instanceof QueryParameter ? 'query' : 'header';
8787
$key = $parameter->getKey();
88-
$schema = $this->getInnerSchema($parameter);
8988

9089
return [
91-
new OpenApiParameter(name: "{$key}[gt]", in: $in, schema: $schema),
92-
new OpenApiParameter(name: "{$key}[gte]", in: $in, schema: $schema),
93-
new OpenApiParameter(name: "{$key}[lt]", in: $in, schema: $schema),
94-
new OpenApiParameter(name: "{$key}[lte]", in: $in, schema: $schema),
90+
new OpenApiParameter(name: "{$key}[gt]", in: $in),
91+
new OpenApiParameter(name: "{$key}[gte]", in: $in),
92+
new OpenApiParameter(name: "{$key}[lt]", in: $in),
93+
new OpenApiParameter(name: "{$key}[lte]", in: $in),
9594
];
9695
}
9796

9897
public function getSchema(Parameter $parameter): array
9998
{
100-
$innerSchema = $this->getInnerSchema($parameter);
99+
$innerSchema = ['type' => 'string'];
100+
if ($this->filter instanceof JsonSchemaFilterInterface) {
101+
$innerSchema = $this->filter->getSchema($parameter);
102+
}
101103

102104
return [
103105
'type' => 'object',
@@ -110,6 +112,9 @@ public function getSchema(Parameter $parameter): array
110112
];
111113
}
112114

115+
/**
116+
* @param array<string,mixed> $context
117+
*/
113118
private function applyOperator(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation, array $context, Parameter $parameter, string $operator, mixed $value): void
114119
{
115120
if (!\is_string($value) && !is_numeric($value) && !$value instanceof \DateTimeInterface) {
@@ -125,13 +130,4 @@ private function applyOperator(QueryBuilder $queryBuilder, QueryNameGeneratorInt
125130
['operator' => $operator, 'parameter' => $subParameter] + $context
126131
);
127132
}
128-
129-
private function getInnerSchema(Parameter $parameter): array
130-
{
131-
if ($this->filter instanceof JsonSchemaFilterInterface) {
132-
return $this->filter->getSchema($parameter);
133-
}
134-
135-
return ['type' => 'string'];
136-
}
137133
}

tests/Functional/Parameters/ComparisonFilterTest.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,6 @@ public function testOpenApiDocumentation(): void
148148
$comparisonParams = array_filter($parameters, static fn ($p) => str_starts_with($p['name'], 'idComparison['));
149149
foreach ($comparisonParams as $param) {
150150
$this->assertSame('query', $param['in']);
151-
$this->assertArrayHasKey('schema', $param);
152-
153-
$this->assertSame('string', $param['schema']['type']);
154151
}
155152
}
156153

0 commit comments

Comments
 (0)