Skip to content

Commit 2986c4b

Browse files
committed
Add Filterable, Orderable and Process Multiple Params trait to users service, add more tests.
1 parent af3e979 commit 2986c4b

File tree

5 files changed

+360
-22
lines changed

5 files changed

+360
-22
lines changed

app/Contracts/Users/UsersServiceContract.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@
1212
interface UsersServiceContract
1313
{
1414

15+
1516
/**
17+
* @param array $attributes
1618
* @param int $limit
1719
* @return mixed
1820
*/
19-
public function get($limit = 20);
21+
public function get(array $attributes = [], $limit = 20);
2022

2123
/**
2224
* @param int|string $id

app/Http/Controllers/Users/UsersController.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,15 @@ public function __construct(UsersServiceContract $service)
3737

3838

3939
/**
40+
* @param Request $request
4041
* @return mixed
4142
*/
42-
public function index()
43+
public function index(Request $request)
4344
{
44-
$users = $this->service->get();
45+
$attributes = $request->except('page');
46+
$limit = isset($attributes['limit']) ? $attributes['limit'] : env('PAGINATION_VALUE', 20);
47+
$users = $this->service->get($attributes, $limit);
48+
$users->appends($attributes);
4549
return $this->response->array($this->service->transform($users));
4650
}
4751

@@ -82,12 +86,12 @@ public function update(Request $request, $uuid)
8286

8387
/**
8488
* @param Request $request
85-
* @param $uuid
89+
* @param $uuids
8690
* @return mixed
8791
*/
88-
public function destroy(Request $request, $uuid)
92+
public function destroy(Request $request, $uuids)
8993
{
90-
$this->service->delete($uuid);
94+
$this->service->delete($uuids);
9195
return $this->response->noContent();
9296
}
9397
}

app/Services/Users/UsersService.php

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44

55
use App\Entities\User;
66
use League\Fractal\TransformerAbstract;
7+
use Dingo\Api\Exception\ResourceException;
78
use App\Transformers\Users\UserTransformer;
89
use App\Contracts\Users\UsersServiceContract;
910
use Joselfonseca\LaravelApiTools\Contracts\FractalAble;
1011
use Joselfonseca\LaravelApiTools\Contracts\ValidateAble;
12+
use Joselfonseca\LaravelApiTools\Traits\FilterableTrait;
1113
use Joselfonseca\LaravelApiTools\Traits\FractalAbleTrait;
1214
use Joselfonseca\LaravelApiTools\Traits\ValidateAbleTrait;
13-
use Joselfonseca\LaravelApiTools\Exceptions\ValidationException;
15+
use Joselfonseca\LaravelApiTools\Traits\OrderQueryResultHelper;
16+
use Joselfonseca\LaravelApiTools\Traits\ProcessMultipleParameterHelper;
1417

1518
/**
1619
* Class UsersService
@@ -19,7 +22,7 @@
1922
class UsersService implements FractalAble, ValidateAble, UsersServiceContract
2023
{
2124

22-
use FractalAbleTrait, ValidateAbleTrait;
25+
use FractalAbleTrait, ValidateAbleTrait, FilterableTrait, OrderQueryResultHelper, ProcessMultipleParameterHelper;
2326

2427
/**
2528
* @var array
@@ -35,7 +38,7 @@ class UsersService implements FractalAble, ValidateAble, UsersServiceContract
3538
*/
3639
protected $validationUpdateRules = [
3740
'name' => 'sometimes|required',
38-
'email' => 'sometimes|required|unique:users,email'
41+
'password' => 'sometimes|required|min:8|confirmed'
3942
];
4043

4144
/**
@@ -78,13 +81,21 @@ public function setTransformer() : TransformerAbstract
7881
return app(UserTransformer::class);
7982
}
8083

84+
8185
/**
86+
* @param array $attributes
8287
* @param int $limit
83-
* @return mixed
88+
* @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Database\Eloquent\Collection|static[]
8489
*/
85-
public function get($limit = 20)
90+
public function get(Array $attributes = [], $limit = 20)
8691
{
8792
$model = $this->model->with($this->includes);
93+
$this->addFilter($attributes);
94+
$this->applyFilters($model, $attributes);
95+
96+
$this->processOrderingRules($attributes);
97+
$this->applyOrderingRules($model);
98+
8899
if (!empty($limit)) {
89100
return $model->paginate($limit);
90101
}
@@ -103,7 +114,7 @@ public function find($id)
103114
/**
104115
* @param array $attributes
105116
* @return User
106-
* @throws ValidationException
117+
* @throws ResourceException
107118
*/
108119
public function create(array $attributes = [])
109120
{
@@ -117,31 +128,48 @@ public function create(array $attributes = [])
117128
* @param int|string $id
118129
* @param array $attributes
119130
* @return User
120-
* @throws ValidationException
131+
* @throws ResourceException
121132
*/
122133
public function update($id, array $attributes = [])
123134
{
124135
$model = $this->find($id);
125136
if (isset($attributes['email']) && $attributes['email'] != $model->email) {
126137
$this->validationUpdateRules['email'] = 'sometimes|required|unique:users,email,'.$model->id;
127138
}
139+
$this->runValidator($attributes, $this->validationUpdateRules, $this->validationMessages);
128140
if(isset($attributes['password'])) {
129141
$attributes['password'] = bcrypt($attributes['password']);
130142
}
131-
$this->runValidator($attributes, $this->validationUpdateRules, $this->validationMessages);
132143
$model->fill($attributes);
133144
$model->save();
134145
return $model->fresh();
135146
}
136147

137148
/**
138-
* @param int|string $id
149+
* @param int|string $ids
139150
* @return bool
140151
*/
141-
public function delete($id)
152+
public function delete($ids)
142153
{
143-
$model = $this->find($id);
144-
$model->delete();
154+
$parameters = $this->processParameter($ids);
155+
156+
foreach ($parameters as $id) {
157+
$model = $this->find($id);
158+
$model->delete();
159+
}
160+
145161
return true;
146162
}
163+
164+
/**
165+
* Filterable fields
166+
* @return array
167+
*/
168+
public function getFilterableFields()
169+
{
170+
return [
171+
'name' => 'partial',
172+
'email' => 'partial',
173+
];
174+
}
147175
}

0 commit comments

Comments
 (0)