ApiProxyController::__invoke()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 5
ccs 0
cts 3
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Napp\Core\Api\Controllers;
4
5
use Illuminate\Http\JsonResponse;
6
use Illuminate\Http\Request;
7
8
/**
9
 * Class ApiProxyController.
10
 */
11
class ApiProxyController extends ApiInternalController
12
{
13
    /**
14
     * @param string  $endpoint
15
     * @param Request $request
16
     *
17
     * @return JsonResponse
18
     */
19
    public function __invoke(string $endpoint, Request $request): JsonResponse
20
    {
21
        $response = $this->callApi($endpoint, $request);
22
23
        return response()->json($response);
24
    }
25
26
    /**
27
     * @param string  $endpoint
28
     * @param Request $request
29
     *
30
     * @return mixed
31
     */
32
    private function callApi(string $endpoint, Request $request)
33
    {
34
        $requestMethod = strtolower($request->getMethod());
35
        $arguments = $request->all();
36
        $url = "/api/{$endpoint}";
37
38
        $methodSupportsArguments = \in_array($requestMethod, ['post', 'put', 'patch']);
39
        $callArguments = [$url];
40
41
        if (true === $methodSupportsArguments) {
42
            $callArguments = [$url, $arguments];
43
44
            return $this->{$requestMethod}(...$callArguments);
45
        }
46
47
        if (false === empty($arguments)) {
48
            $callArguments = [$url . '?' . http_build_query($arguments)];
49
        }
50
51
        return $this->{$requestMethod}(...$callArguments);
52
    }
53
}
54