BaseController::responseCollection()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 4
dl 0
loc 9
rs 10
c 1
b 0
f 0
cc 2
nc 2
nop 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Sarala\Http\Controllers;
6
7
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
8
use Illuminate\Http\JsonResponse;
9
use Illuminate\Http\Request;
10
use Illuminate\Routing\Controller;
11
use League\Fractal\Manager;
12
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
13
use League\Fractal\Resource\Collection;
14
use League\Fractal\Resource\Item;
15
use Sarala\Query\ApiRequestInspector;
16
17
class BaseController extends Controller
18
{
19
    protected Manager $manager;
20
    private Request $request;
21
22
    public function __construct(Manager $manager, Request $request)
23
    {
24
        if ($request->filled('include')) {
25
            $manager->parseIncludes($request->get('include'));
26
        }
27
28
        if ($request->filled('exclude')) {
29
            $manager->parseExcludes($request->get('exclude'));
30
        }
31
32
        $this->manager = $manager;
33
        $this->request = $request;
34
    }
35
36
    public function callAction($method, $parameters)
37
    {
38
        if ($this->request->filled('include')) {
39
            (new ApiRequestInspector($parameters))->inspect();
40
        }
41
42
        return parent::callAction($method, $parameters);
43
    }
44
45
    public function responseItem($object, $transformer, $resourceKey, $status = 200): JsonResponse
46
    {
47
        $resource = new Item($object, $transformer, $resourceKey);
48
49
        return $this->response($this->manager->createData($resource)->toArray(), $status);
50
    }
51
52
    public function responseCollection($collection, $transformer, $resourceKey, $status = 200): JsonResponse
53
    {
54
        $resource = new Collection($collection, $transformer, $resourceKey);
55
56
        if ($collection instanceof LengthAwarePaginator) {
57
            $resource->setPaginator(new IlluminatePaginatorAdapter($collection));
58
        }
59
60
        return $this->response($this->manager->createData($resource)->toArray(), $status);
61
    }
62
63
    private function response($data, $status)
64
    {
65
        return response()->json($data, $status);
66
    }
67
}
68