4
4
5
5
use App \Entities \User ;
6
6
use League \Fractal \TransformerAbstract ;
7
+ use Dingo \Api \Exception \ResourceException ;
7
8
use App \Transformers \Users \UserTransformer ;
8
9
use App \Contracts \Users \UsersServiceContract ;
9
10
use Joselfonseca \LaravelApiTools \Contracts \FractalAble ;
10
11
use Joselfonseca \LaravelApiTools \Contracts \ValidateAble ;
12
+ use Joselfonseca \LaravelApiTools \Traits \FilterableTrait ;
11
13
use Joselfonseca \LaravelApiTools \Traits \FractalAbleTrait ;
12
14
use Joselfonseca \LaravelApiTools \Traits \ValidateAbleTrait ;
13
- use Joselfonseca \LaravelApiTools \Exceptions \ValidationException ;
15
+ use Joselfonseca \LaravelApiTools \Traits \OrderQueryResultHelper ;
16
+ use Joselfonseca \LaravelApiTools \Traits \ProcessMultipleParameterHelper ;
14
17
15
18
/**
16
19
* Class UsersService
19
22
class UsersService implements FractalAble, ValidateAble, UsersServiceContract
20
23
{
21
24
22
- use FractalAbleTrait, ValidateAbleTrait;
25
+ use FractalAbleTrait, ValidateAbleTrait, FilterableTrait, OrderQueryResultHelper, ProcessMultipleParameterHelper ;
23
26
24
27
/**
25
28
* @var array
@@ -35,7 +38,7 @@ class UsersService implements FractalAble, ValidateAble, UsersServiceContract
35
38
*/
36
39
protected $ validationUpdateRules = [
37
40
'name ' => 'sometimes|required ' ,
38
- 'email ' => 'sometimes|required|unique:users,email '
41
+ 'password ' => 'sometimes|required|min:8|confirmed '
39
42
];
40
43
41
44
/**
@@ -78,13 +81,21 @@ public function setTransformer() : TransformerAbstract
78
81
return app (UserTransformer::class);
79
82
}
80
83
84
+
81
85
/**
86
+ * @param array $attributes
82
87
* @param int $limit
83
- * @return mixed
88
+ * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Database\Eloquent\Collection|static[]
84
89
*/
85
- public function get ($ limit = 20 )
90
+ public function get (Array $ attributes = [], $ limit = 20 )
86
91
{
87
92
$ 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
+
88
99
if (!empty ($ limit )) {
89
100
return $ model ->paginate ($ limit );
90
101
}
@@ -103,7 +114,7 @@ public function find($id)
103
114
/**
104
115
* @param array $attributes
105
116
* @return User
106
- * @throws ValidationException
117
+ * @throws ResourceException
107
118
*/
108
119
public function create (array $ attributes = [])
109
120
{
@@ -117,31 +128,48 @@ public function create(array $attributes = [])
117
128
* @param int|string $id
118
129
* @param array $attributes
119
130
* @return User
120
- * @throws ValidationException
131
+ * @throws ResourceException
121
132
*/
122
133
public function update ($ id , array $ attributes = [])
123
134
{
124
135
$ model = $ this ->find ($ id );
125
136
if (isset ($ attributes ['email ' ]) && $ attributes ['email ' ] != $ model ->email ) {
126
137
$ this ->validationUpdateRules ['email ' ] = 'sometimes|required|unique:users,email, ' .$ model ->id ;
127
138
}
139
+ $ this ->runValidator ($ attributes , $ this ->validationUpdateRules , $ this ->validationMessages );
128
140
if (isset ($ attributes ['password ' ])) {
129
141
$ attributes ['password ' ] = bcrypt ($ attributes ['password ' ]);
130
142
}
131
- $ this ->runValidator ($ attributes , $ this ->validationUpdateRules , $ this ->validationMessages );
132
143
$ model ->fill ($ attributes );
133
144
$ model ->save ();
134
145
return $ model ->fresh ();
135
146
}
136
147
137
148
/**
138
- * @param int|string $id
149
+ * @param int|string $ids
139
150
* @return bool
140
151
*/
141
- public function delete ($ id )
152
+ public function delete ($ ids )
142
153
{
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
+
145
161
return true ;
146
162
}
163
+
164
+ /**
165
+ * Filterable fields
166
+ * @return array
167
+ */
168
+ public function getFilterableFields ()
169
+ {
170
+ return [
171
+ 'name ' => 'partial ' ,
172
+ 'email ' => 'partial ' ,
173
+ ];
174
+ }
147
175
}
0 commit comments