Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
12 / 12 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
1 / 1 |
OpenApiDocumentationController | |
100.00% |
12 / 12 |
|
100.00% |
2 / 2 |
3 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
__invoke | |
100.00% |
11 / 11 |
|
100.00% |
1 / 1 |
2 |
1 | <?php |
2 | namespace Apie\RestApi\Controllers; |
3 | |
4 | use Apie\Core\BoundedContext\BoundedContextHashmap; |
5 | use Apie\RestApi\OpenApi\OpenApiGenerator; |
6 | use cebe\openapi\Writer; |
7 | use Nyholm\Psr7\Factory\Psr17Factory; |
8 | use Psr\Http\Message\ResponseInterface; |
9 | use Psr\Http\Message\ServerRequestInterface; |
10 | |
11 | class OpenApiDocumentationController |
12 | { |
13 | public function __construct( |
14 | private BoundedContextHashmap $boundedContextHashmap, |
15 | private OpenApiGenerator $openApiGenerator |
16 | ) { |
17 | } |
18 | |
19 | public function __invoke(ServerRequestInterface $request): ResponseInterface |
20 | { |
21 | $boundedContextId = $request->getAttribute('boundedContextId'); |
22 | $yaml = $request->getAttribute('yaml'); |
23 | $boundedContext = $this->boundedContextHashmap[$boundedContextId]; |
24 | $openapi = $this->openApiGenerator->create($boundedContext); |
25 | $psr17Factory = new Psr17Factory(); |
26 | $responseBody = $psr17Factory->createStream( |
27 | $yaml ? Writer::writeToYaml($openapi) : Writer::writeToJson($openapi, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) |
28 | ); |
29 | return $psr17Factory->createResponse(200) |
30 | ->withBody($responseBody) |
31 | ->withHeader('Content-Type', 'application/openapi+yaml'); |
32 | } |
33 | } |