Skip to content

Commit 926e986

Browse files
committed
adding a feature to define where conditionals before searches
1 parent feb626a commit 926e986

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

src/Services/SearchService.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
namespace LaravelDomainOriented\Services;
44

5+
use Illuminate\Contracts\Auth\Guard;
6+
use Illuminate\Database\Eloquent\Builder;
57
use Illuminate\Http\Request;
8+
use Illuminate\Support\Facades\Auth;
69
use LaravelDomainOriented\Models\SearchModel;
710

811
class SearchService
@@ -19,7 +22,9 @@ public function __construct(SearchModel $model, FilterService $filterService)
1922

2023
public function all(Request $request)
2124
{
22-
$builder = $this->filterService->apply($this->model->query(), $request);
25+
$builder = $this->beforeSearch($this->model->query(), Auth::guard());
26+
27+
$builder = $this->filterService->apply($builder, $request);
2328
$paginate = $request->get('paginate');
2429

2530
$page = $paginate['page'] ?? 0;
@@ -34,11 +39,18 @@ public function all(Request $request)
3439

3540
public function findById(int $id)
3641
{
37-
return $this->model->findOrFail($id);
42+
$builder = $this->beforeSearch($this->model->query(), Auth::guard());
43+
44+
return $builder->findOrFail($id);
3845
}
3946

4047
public function getModel(): SearchModel
4148
{
4249
return $this->model;
4350
}
51+
52+
public function beforeSearch(Builder $builder, Guard $auth): Builder
53+
{
54+
return $builder;
55+
}
4456
}

tests/Unit/SearchServiceTest.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,16 @@
22

33
namespace Tests\Unit;
44

5+
use App\Domain\Test\TestFilterService;
6+
use App\Domain\Test\TestSearchModel;
57
use App\Domain\Test\TestSearchService;
8+
use Illuminate\Contracts\Auth\Guard;
9+
use Illuminate\Database\Eloquent\Builder;
610
use Illuminate\Database\Eloquent\ModelNotFoundException;
711
use Illuminate\Http\Request;
12+
use LaravelDomainOriented\Models\SearchModel;
13+
use LaravelDomainOriented\Services\FilterService;
14+
use LaravelDomainOriented\Services\SearchService;
815
use LaravelDomainOriented\Tests\Cases\DBTestCase;
916

1017
class SearchServiceTest extends DBTestCase
@@ -95,4 +102,30 @@ public function it_should_throw_model_not_found_exception()
95102

96103
$searchService->findById(15);
97104
}
105+
106+
/** @test **/
107+
public function it_should_use_before_search_method_and_return_no_data()
108+
{
109+
$searchService = $this->app->make(MyCustomSearchService::class);
110+
$request = new Request();
111+
$data = $searchService->all($request);
112+
113+
$this->assertCount(0, $data);
114+
}
115+
}
116+
117+
class MyCustomSearchService extends SearchService {
118+
protected SearchModel $model;
119+
protected FilterService $filterService;
120+
121+
public function __construct(TestSearchModel $model, TestFilterService $filterService)
122+
{
123+
$this->model = $model;
124+
$this->filterService = $filterService;
125+
}
126+
127+
public function beforeSearch(Builder $builder, Guard $auth): Builder
128+
{
129+
return $builder->where('name', 'xxxx');
130+
}
98131
}

0 commit comments

Comments
 (0)