|
3 | 3 | namespace App\Services\User; |
4 | 4 |
|
5 | 5 | use App\Http\Resources\UserResource; |
6 | | -use App\Models\Role; |
7 | 6 | use App\Models\User; |
8 | 7 | use App\Services\Media\MediaService; |
| 8 | +use App\Traits\Filterable; |
9 | 9 | use App\Utilities\Data; |
10 | 10 | use Bouncer; |
| 11 | +use Illuminate\Database\Eloquent\Builder; |
11 | 12 | use Illuminate\Database\Eloquent\Model; |
| 13 | +use Illuminate\Support\Arr; |
12 | 14 | use Illuminate\Support\Carbon; |
13 | 15 |
|
14 | 16 | class UserService |
@@ -49,16 +51,22 @@ public function index($data) |
49 | 51 | if (!empty($data['search'])) { |
50 | 52 | $query = $query->search($data['search']); |
51 | 53 | } |
| 54 | + if (!empty($data['filters'])) { |
| 55 | + $this->filter($query, $data['filters']); |
| 56 | + } |
52 | 57 | if (!empty($data['sort_by']) && !empty($data['sort'])) { |
53 | 58 | $query = $query->orderBy($data['sort_by'], $data['sort']); |
54 | 59 | } |
| 60 | + |
| 61 | +// dd(vsprintf(str_replace('?', '%s', str_replace('?', "'?'", $query->toSql())), $query->getBindings())); |
| 62 | + |
55 | 63 | return UserResource::collection($query->paginate(10)); |
56 | 64 | } |
57 | 65 |
|
58 | 66 | /** |
59 | 67 | * Creates resource in the database |
60 | 68 | * @param array $data |
61 | | - * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|null |
| 69 | + * @return Builder|\Illuminate\Database\Eloquent\Model|null |
62 | 70 | */ |
63 | 71 | public function create(array $data) |
64 | 72 | { |
@@ -177,4 +185,25 @@ private function clean(array $data) |
177 | 185 | } |
178 | 186 | return $data; |
179 | 187 | } |
| 188 | + |
| 189 | + /** |
| 190 | + * Filter resources |
| 191 | + * @return void |
| 192 | + */ |
| 193 | + private function filter(Builder &$query, $filters) |
| 194 | + { |
| 195 | + $query->filter(Arr::except($filters, ['role'])); |
| 196 | + |
| 197 | + if (!empty($filters['role'])) { |
| 198 | + $roleFilter = Filterable::parseFilter($filters['role']); |
| 199 | + if (!empty($roleFilter)) { |
| 200 | + if (is_array($roleFilter[2])) { |
| 201 | + $query->whereIs(...$roleFilter[2]); |
| 202 | + } else { |
| 203 | + $query->whereIs($roleFilter[2]); |
| 204 | + } |
| 205 | + } |
| 206 | + } |
| 207 | + |
| 208 | + } |
180 | 209 | } |
0 commit comments