Passed
Push — master ( d7d8c0...c26592 )
by Mads
03:35
created

ApiProxyController::callApi()   A

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.4285
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
class ApiProxyController extends ApiInternalController
9
{
10
    /**
11
     * @param string $endpoint
12
     * @param Request $request
13
     * @return JsonResponse
14
     */
15
    public function __invoke(string $endpoint, Request $request): JsonResponse
16
    {
17
        $response = $this->callApi($endpoint, $request);
18
19
        return response()->json($response);
20
    }
21
22
    /**
23
     * @param string $endpoint
24
     * @param Request $request
25
     * @return mixed
26
     */
27
    private function callApi(string $endpoint, Request $request)
28
    {
29
        $requestMethod = strtolower($request->getMethod());
30
        $arguments = $request->all();
31
        $url = "/api/{$endpoint}";
32
33
        $methodSupportsArguments = in_array($requestMethod, ['post', 'put', 'patch']);
34
        $callArguments = [$url];
35
36
        if (true === $methodSupportsArguments) {
37
            $callArguments = [$url, $arguments];
38
39
            return $this->{$requestMethod}(...$callArguments);
40
        }
41
42
        if (false === empty($arguments)) {
43
            $callArguments = [$url . '?' . http_build_query($arguments)];
44
        }
45
46
        return $this->{$requestMethod}(...$callArguments);
47
    }
48
}
49