Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
9 / 9
CRAP
100.00% covered (success)
100.00%
41 / 41
FeatureController
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
9 / 9
16
100.00% covered (success)
100.00%
41 / 41
 index
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
5 / 5
 store
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 show
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 update
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
 destroy
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 createOperation
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
 copyOperation
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
10 / 10
 getNameOperation
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
 validateData
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
6 / 6
1<?php
2
3namespace Qmp\Laravel\Entities\Controllers;
4
5use Illuminate\Http\JsonResponse;
6use Illuminate\Http\Request;
7use Illuminate\Support\Str;
8use Qmp\Laravel\Entities\Services\Features\Features;
9use Qmp\Laravel\MicroService\Controllers\AbstractMicroServiceController;
10use Illuminate\Validation\Rule;
11use Qmp\Laravel\Entities\Models\Feature;
12use Qmp\Laravel\MicroService\Client\Tools\Request as ClientRequest;
13use Qmp\Laravel\MicroService\Client\Client;
14
15class FeatureController extends AbstractMicroServiceController
16{
17    /**
18     * @param \Illuminate\Http\Request $request
19     * @param \Qmp\Laravel\Entities\Services\Features\Features $featuresService
20     * @return \Illuminate\Http\JsonResponse
21     */
22    public function index(Request $request, Features $featuresService): JsonResponse
23    {
24        if($request->user) {
25            return response()->json($featuresService->getFeaturesByUser($this->userId));
26        }
27
28        if($request->externaluser) {
29            return response()->json($featuresService->getFeaturesByExternalUser($request, $this->httpOrigin));
30        }
31
32        return response()->json(Feature::all());
33    }
34
35    /**
36     * Store a newly created resource in storage.
37     *
38     * @param \Illuminate\Http\Request $request
39     * @return \Qmp\Laravel\Entities\Models\Feature
40     */
41    public function store(Request $request): Feature
42    {
43        $validatedData = $this->validateData($request);
44
45        return Feature::create($validatedData);
46    }
47
48    /**
49     * Display the specified resource.
50     *
51     * @param \Qmp\Laravel\Entities\Models\Feature $Feature
52     * @return \Illuminate\Http\JsonResponse
53     */
54    public function show(Feature $Feature): JsonResponse
55    {
56        return response()->json([
57            'Feature' => $Feature->toArray(),
58        ]);
59    }
60
61    /**
62     * Update the specified resource in storage.
63     *
64     * @param \Illuminate\Http\Request $request
65     * @param $id
66     * @return \Illuminate\Http\JsonResponse
67     */
68    public function update(Request $request, $id): JsonResponse
69    {
70        $validatedData = $this->validateData($request, $id);
71        $model = Feature::findOrFail($id);
72
73        $result = $model->update($validatedData);
74
75        return response()->json(['status' => $result ? 'ok' : 'ko']);
76    }
77
78    /**
79     * Remove the specified resource from storage.
80     *
81     * @param $id
82     * @return \Illuminate\Http\JsonResponse
83     */
84    public function destroy($id): JsonResponse
85    {
86        Feature::find($id)->delete();
87
88        return response()->json(['status' => 'ok']);
89    }
90
91    /**
92     * @param \Illuminate\Http\Request $request
93     * @param \Qmp\Laravel\Entities\Models\Feature $feature
94     * @return \Illuminate\Http\JsonResponse
95     */
96    public function createOperation(Request $request, Feature $feature): JsonResponse
97    {
98        $request = ClientRequest::createObject($feature->service, 'create-new-operation', ['prefix_url' => $feature->stack]);
99        $responseCreateOperation = Client::systemSend('post', $request);
100
101        if (Str::startsWith($responseCreateOperation->code, '2')) {
102            return response()->json($responseCreateOperation->content);
103        }
104
105        return response()->json(['status' => 'ko'], 422);
106    }
107
108    /**
109     * @param \Illuminate\Http\Request $request
110     * @param \Qmp\Laravel\Entities\Models\Feature $feature
111     * @return \Illuminate\Http\JsonResponse
112     */
113    public function copyOperation(Request $request, Feature $feature): JsonResponse
114    {
115        $data = $request->validate([
116            'id' => 'required',
117            'campaign_id' => 'required'
118        ]);
119
120        $request = ClientRequest::createObject($feature->service, 'copy-operation', [
121            'body' => [
122                'id' => $data['id'],
123                'campaign_id' => $data['campaign_id']
124            ],
125            'prefix_url' => $feature->stack
126        ]);
127        $responseCreateOperation = Client::systemSend('post', $request);
128
129        if (Str::startsWith($responseCreateOperation->code, '2')) {
130            return response()->json($responseCreateOperation->content);
131        }
132
133        return response()->json(['status' => 'ko'], 422);
134    }
135
136    /**
137     * @param \Qmp\Laravel\Entities\Models\Feature $feature
138     * @param $id
139     * @return \Illuminate\Http\JsonResponse
140     */
141    public function getNameOperation(Feature $feature, $id): JsonResponse
142    {
143        $request = ClientRequest::createObject($feature->service, 'get-name-operation/' . $id, ['prefix_url' => $feature->stack]);
144        $responseGetOperation = Client::systemSend('get', $request);
145
146        if (Str::startsWith($responseGetOperation->code, '2')) {
147            return response()->json($responseGetOperation->content);
148        }
149
150        return response()->json(['status' => 'ko'], 422);
151    }
152
153    /**
154     * @param \Illuminate\Http\Request $request
155     * @param null $id
156     * @return array
157     */
158    protected function validateData(Request $request, $id = null): array
159    {
160        $rules =[
161            'name' => 'required|string',
162            'icon' => 'required|string',
163            'path' => 'required|string',
164            'path_list' => 'required|string',
165            'service' => 'required|string',
166            'options' => 'present|array',
167            'display' => 'required|boolean'
168        ];
169
170        if ($id != null) {
171            $rules['id'] = [
172                'required',
173                Rule::in([$id])
174            ];
175        }
176
177        return $request->validate($rules);
178    }
179}