Skip to content

Commit e109181

Browse files
committed
Facet constraint processor
1 parent 9159334 commit e109181

File tree

2 files changed

+4
-68
lines changed

2 files changed

+4
-68
lines changed

src/Processors/FacetConstraintProcessor.php

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,28 @@
22

33
namespace Ensi\LaravelElasticQuerySpecification\Processors;
44

5-
use Ensi\LaravelElasticQuery\Contracts\BoolQuery;
65
use Ensi\LaravelElasticQuerySpecification\Faceting\AllowedFacet;
76
use Ensi\LaravelElasticQuerySpecification\Filtering\AllowedFilter;
87
use Ensi\LaravelElasticQuerySpecification\Specification\Specification;
9-
use Ensi\LaravelElasticQuerySpecification\Specification\Visitor;
108

11-
class FacetConstraintProcessor implements Visitor
9+
class FacetConstraintProcessor extends ConstraintProcessor
1210
{
13-
public function __construct(private BoolQuery $query)
14-
{
15-
}
16-
1711
public function visitRoot(Specification $specification): void
1812
{
1913
$filters = $specification->facets()
2014
->filter(fn (AllowedFacet $facet) => $facet->isActive())
2115
->flatMap(fn (AllowedFacet $facet) => $facet->filters())
2216
->each(fn (AllowedFilter $filter) => $filter->disable());
2317

24-
$this->buildConstraints($this->query, $specification);
18+
parent::visitRoot($specification);
2519

2620
$filters->each(fn (AllowedFilter $filter) => $filter->enable());
2721
}
2822

2923
public function visitNested(string $field, Specification $specification): void
3024
{
31-
if ($specification->hasActiveFacet()) {
32-
return;
33-
}
34-
35-
if (!$specification->hasActiveFilter()) {
36-
return;
37-
}
38-
39-
$this->query->whereHas(
40-
$field,
41-
fn (BoolQuery $query) => $this->buildConstraints($query, $specification)
42-
);
43-
}
44-
45-
public function done(): void
46-
{
47-
}
48-
49-
private function buildConstraints(BoolQuery $query, Specification $specification): void
50-
{
51-
foreach ($specification->constraints() as $constraint) {
52-
$constraint($query);
25+
if (!$specification->hasActiveFacet()) {
26+
parent::visitNested($field, $specification);
5327
}
5428
}
5529
}

tests/Unit/Processors/FacetConstraintProcessorTest.php

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,6 @@
99

1010
uses()->group('unit');
1111

12-
test('visit root', function () {
13-
$spec = Specification::new()->where('foo', 10);
14-
15-
$query = Mockery::mock(BoolQuery::class);
16-
$query->expects('where')
17-
->with('foo', 10)
18-
->once()
19-
->andReturnSelf();
20-
21-
FluentProcessor::new(FacetConstraintProcessor::class, $query)
22-
->visitRoot($spec);
23-
});
24-
2512
test('skip active facet filters in root specification', function () {
2613
$filter = AllowedFilter::exact('foo')->setValue(10);
2714
$facet = AllowedFacet::minmax('foo');
@@ -60,21 +47,6 @@
6047
->visitRoot($spec);
6148
});
6249

63-
test('nested constraint', function () {
64-
$spec = Specification::new()->allowedFilters([
65-
AllowedFilter::exact('foo')->default(10),
66-
]);
67-
68-
$query = Mockery::mock(BoolQuery::class);
69-
$query->expects('whereHas')
70-
->with('nested', any())
71-
->once()
72-
->andReturnSelf();
73-
74-
FluentProcessor::new(FacetConstraintProcessor::class, $query)
75-
->visitNested('nested', $spec);
76-
});
77-
7850
test('nested specification has active facet', function () {
7951
$facet = AllowedFacet::minmax('foo');
8052
$facet->enable();
@@ -87,13 +59,3 @@
8759
FluentProcessor::new(FacetConstraintProcessor::class, $query)
8860
->visitNested('nested', $spec);
8961
});
90-
91-
test('nested specification does not contain active filters', function () {
92-
$spec = Specification::new()->where('foo', 10);
93-
94-
$query = Mockery::mock(BoolQuery::class);
95-
$query->expects('whereHas')->andReturnSelf()->never();
96-
97-
FluentProcessor::new(FacetConstraintProcessor::class, $query)
98-
->visitNested('nested', $spec);
99-
});

0 commit comments

Comments
 (0)