GraphQLController::executeQuery()   A
last analyzed

Complexity

Conditions 4
Paths 5

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.2
c 0
b 0
f 0
cc 4
eloc 6
nc 5
nop 2
1
<?php
2
3
namespace LaraComponents\GraphQL;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Http\JsonResponse;
7
use Illuminate\Routing\Controller;
8
use Youshido\GraphQL\Execution\Processor;
9
10
class GraphQLController extends Controller
11
{
12
    public function index(Request $request, Processor $processor)
13
    {
14
        list($queries, $isMultiQueryRequest) = $this->getPayload($request);
15
16
        $response = array_map(function ($query) use ($processor) {
17
            return $this->executeQuery($processor, $query);
18
        }, $queries);
19
20
        return new JsonResponse(
21
            $isMultiQueryRequest ? $response : $response[0],
22
            200,
23
            config('graphql.response.headers', []),
24
            config('graphql.response.json_options', 0)
25
        );
26
    }
27
28
    protected function getPayload(Request $request)
29
    {
30
        $isMultiQueryRequest = false;
31
        $queries = $request->all();
32
33
        if (array_keys($queries) === range(0, count($queries) - 1)) {
34
            $isMultiQueryRequest = true;
35
        } else {
36
            $queries = [$queries];
37
        }
38
39
        return [$queries, $isMultiQueryRequest];
40
    }
41
42
    protected function executeQuery($processor, $input)
43
    {
44
        $query = array_get($input, 'query', null);
45
        $variables = array_get($input, 'variables');
46
47
        if (! is_array($variables)) {
48
            $variables = is_string($variables) ? json_decode($variables, true) ?: [] : [];
49
        }
50
51
        return $processor->processPayload($query, $variables)->getResponseData();
52
    }
53
}
54