Completed
Push — master ( c6ec87...10b52b )
by Nikita
01:12
created

GraphQLController::getPayload()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 8
nc 2
nop 1
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
        }
36
        else {
37
            $queries = [$queries];
38
        }
39
40
        return [$queries, $isMultiQueryRequest];
41
    }
42
43
    protected function executeQuery($processor, $input)
44
    {
45
        $query = array_get($input, 'query', null);
46
        $variables = array_get($input, 'variables');
47
        $variables = is_string($variables) ? json_decode($variables, true) ?: [] : [];
48
49
        return $processor->processPayload($query, $variables)->getResponseData();
50
    }
51
}
52