APIResponses::update()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 22
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 12
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 22
rs 9.8666
1
<?php
2
3
/** @noinspection PhpMultipleClassDeclarationsInspection */
4
5
namespace Shamaseen\Repository\Utility;
6
7
use Illuminate\Contracts\Pagination\Paginator;
8
use Illuminate\Database\Eloquent\Collection;
9
use Illuminate\Database\Eloquent\Model as EloquentModel;
10
use Illuminate\Http\JsonResponse;
11
use Illuminate\Http\Resources\Json\JsonResource;
12
use Shamaseen\Repository\Interfaces\CrudResponse;
13
use Symfony\Component\HttpFoundation\Response;
14
15
class APIResponses implements CrudResponse
16
{
17
    private Controller $controller;
18
19
    public function __construct(Controller $controller)
20
    {
21
        $this->controller = $controller;
22
    }
23
24
    public function index(Paginator|Collection $paginate): JsonResponse
25
    {
26
        $resource = new $this->controller->collectionClass($paginate);
27
28
        $resource->additional = $this->controller->params;
29
30
        $response = $resource->response();
31
        $code = Response::HTTP_OK;
32
33
        if ($paginate->hasMorePages()) {
34
            $code = Response::HTTP_PARTIAL_CONTENT;
35
        }
36
37
        return $response->setStatusCode($code);
38
    }
39
40
    public function show(EloquentModel $entity): JsonResponse
41
    {
42
        /**
43
         * @var JsonResource $resource
44
         */
45
        $resource = new $this->controller->resourceClass($entity);
46
        $resource->additional = $this->controller->params;
47
48
        return $resource->response()->setStatusCode(Response::HTTP_OK);
49
    }
50
51
    public function create(): JsonResponse
52
    {
53
        return response()->json(
54
            [
55
                'message' => __('repository.no_content'),
56
                'data' => $this->controller->params,
57
            ],
58
            Response::HTTP_NO_CONTENT
59
        );
60
    }
61
62
    public function store(EloquentModel $entity): JsonResponse
63
    {
64
        /**
65
         * @var JsonResource $resource
66
         */
67
        $resource = new $this->controller->resourceClass($entity);
68
69
        return $resource
70
            ->additional(array_merge([
71
                'message' => __('repository.created_successfully'),
72
            ], $this->controller->params))
73
            ->response()
74
            ->setStatusCode(Response::HTTP_CREATED);
75
    }
76
77
    public function edit(EloquentModel $entity): JsonResponse
78
    {
79
        return response()->json(
80
            [
81
                'message' => __('repository.no_content'),
82
                'data' => $this->controller->params,
83
            ],
84
            Response::HTTP_NO_CONTENT
85
        );
86
    }
87
88
    public function update(int|bool|EloquentModel $updatedCount): JsonResponse
89
    {
90
        if ($updatedCount instanceof EloquentModel) {
91
            /**
92
             * @var JsonResource $resource
93
             */
94
            $resource = new $this->controller->resourceClass($updatedCount);
95
96
            return $resource
97
                ->additional(array_merge([
98
                    'message' => __('repository.modified_successfully'),
99
                ], $this->controller->params))
100
                ->response()
101
                ->setStatusCode(Response::HTTP_OK);
102
        }
103
104
        return response()->json(
105
            [
106
                'message' => __('repository.modified_successfully'),
107
                'data' => $this->controller->params,
108
            ],
109
            Response::HTTP_OK
110
        );
111
    }
112
113
    public function destroy(int|bool $destroyedCount): JsonResponse
114
    {
115
        return response()->json([
116
            'message' => __('repository.deleted_successfully'),
117
            'data' => $this->controller->params,
118
        ], Response::HTTP_OK);
119
    }
120
}
121