ApiProxyController::callApi()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 20
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
cc 3
eloc 11
nc 3
nop 2
dl 0
loc 20
ccs 0
cts 12
cp 0
crap 12
rs 9.9
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