Skip to content

Commit 8da48b8

Browse files
authored
Merge pull request #135 from andrew-demb/inject-http-code-decider
Allow to inject http code decider to controller
2 parents c727299 + bef5bc9 commit 8da48b8

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

Controller/GraphQLiteController.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Laminas\Diactoros\UploadedFileFactory;
1111
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
1212
use TheCodingMachine\GraphQLite\Http\HttpCodeDecider;
13+
use TheCodingMachine\GraphQLite\Http\HttpCodeDeciderInterface;
1314
use function array_map;
1415
use GraphQL\Executor\ExecutionResult;
1516
use GraphQL\Server\ServerConfig;
@@ -42,12 +43,17 @@ class GraphQLiteController
4243
* @var ServerConfig
4344
*/
4445
private $serverConfig;
46+
/**
47+
* @var HttpCodeDeciderInterface
48+
*/
49+
private $httpCodeDecider;
4550

46-
public function __construct(ServerConfig $serverConfig, HttpMessageFactoryInterface $httpMessageFactory = null, ?int $debug = null)
51+
public function __construct(ServerConfig $serverConfig, HttpMessageFactoryInterface $httpMessageFactory = null, ?int $debug = null, ?HttpCodeDeciderInterface $httpCodeDecider = null)
4752
{
4853
$this->serverConfig = $serverConfig;
4954
$this->httpMessageFactory = $httpMessageFactory ?: new PsrHttpFactory(new ServerRequestFactory(), new StreamFactory(), new UploadedFileFactory(), new ResponseFactory());
5055
$this->debug = $debug ?? $serverConfig->getDebugFlag();
56+
$this->httpCodeDecider = $httpCodeDecider ?? new HttpCodeDecider();
5157
}
5258

5359
public function loadRoutes(): RouteCollection
@@ -102,16 +108,15 @@ private function handlePsr7Request(ServerRequestInterface $request, Request $sym
102108
$standardService = new StandardServer($serverConfig);
103109
$result = $standardService->executePsrRequest($request);
104110

105-
$httpCodeDecider = new HttpCodeDecider();
106111
if ($result instanceof ExecutionResult) {
107-
return new JsonResponse($result->toArray($this->debug), $httpCodeDecider->decideHttpStatusCode($result));
112+
return new JsonResponse($result->toArray($this->debug), $this->httpCodeDecider->decideHttpStatusCode($result));
108113
}
109114
if (is_array($result)) {
110115
$finalResult = array_map(function (ExecutionResult $executionResult): array {
111116
return $executionResult->toArray($this->debug);
112117
}, $result);
113118
// Let's return the highest result.
114-
$statuses = array_map([$httpCodeDecider, 'decideHttpStatusCode'], $result);
119+
$statuses = array_map([$this->httpCodeDecider, 'decideHttpStatusCode'], $result);
115120
$status = empty($statuses) ? 500 : max($statuses);
116121

117122
return new JsonResponse($finalResult, $status);

0 commit comments

Comments
 (0)