Completed
Pull Request — master (#158)
by Manuel
01:18
created

ResourceIndexController::handle()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 26
rs 9.504
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Oscer\Cms\Backend\Http\Controllers;
4
5
use Illuminate\Database\Eloquent\Builder;
6
use Illuminate\Database\Eloquent\Model;
7
use Oscer\Cms\Backend\Http\Requests\ResourceRequest;
8
9
class ResourceIndexController
10
{
11
    protected string $resourceClass;
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected T_STRING, expecting T_FUNCTION or T_CONST
Loading history...
12
13
    public function handle(ResourceRequest $request)
14
    {
15
        $this->resourceClass = $request->getResource();
16
17
        $query = $this->prepareQuery($request);
18
        $collection = $query->paginate(10);
19
20
        return response()->json([
21
            'data' => collect($collection->items())
22
                ->map(function (Model $model) {
23
                    return new $this->resourceClass($model);
24
                })->toArray(),
25
            'meta' => [
26
                'total' => $collection->total(),
27
                'from' => $collection->firstItem(),
28
                'to' => $collection->lastItem(),
29
                'current_page' => $collection->currentPage(),
30
                'first_page_url' => $collection->url(1),
31
                'last_page' => $collection->lastPage(),
32
                'last_page_url' => $collection->url($collection->lastPage()),
33
                'next_page_url' => $collection->nextPageUrl(),
34
                'path' => $collection->path(),
35
                'per_page' => $collection->perPage(),
36
                'prev_page_url' => $collection->previousPageUrl(),
37
            ],
38
        ]);
39
    }
40
41
    protected function prepareQuery(ResourceRequest $request)
42
    {
43
        $resourceModel = $request->getResourceModel();
44
45
        /** @var Builder $query */
46
        $query = $resourceModel::query();
47
48
        if ($search = $request->query('search')) {
49
            foreach ($this->resourceClass::$searchColumns as $column) {
50
                $query->orWhere($column, 'like', "%{$search}%");
51
            }
52
        }
53
54
        return $query;
55
    }
56
}
57