Completed
Push — master ( 5c0b6f...5c71f2 )
by Oleg
10:16
created

DeleteConfigAction::process()   A

Complexity

Conditions 2
Paths 5

Size

Total Lines 26

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 2.1821

Importance

Changes 0
Metric Value
dl 0
loc 26
ccs 9
cts 14
cp 0.6429
rs 9.504
c 0
b 0
f 0
cc 2
nc 5
nop 2
crap 2.1821
1
<?php
2
declare(strict_types=1);
3
4
namespace SlayerBirden\DataFlowServer\Db\Controller;
5
6
use Doctrine\Common\Persistence\ManagerRegistry;
7
use Doctrine\ORM\ORMException;
8
use Psr\Http\Message\ResponseInterface;
9
use Psr\Http\Message\ServerRequestInterface;
10
use Psr\Http\Server\MiddlewareInterface;
11
use Psr\Http\Server\RequestHandlerInterface;
12
use Psr\Log\LoggerInterface;
13
use SlayerBirden\DataFlowServer\Db\Entities\DbConfiguration;
14
use SlayerBirden\DataFlowServer\Doctrine\Middleware\ResourceMiddlewareInterface;
15
use SlayerBirden\DataFlowServer\Notification\DangerMessage;
16
use SlayerBirden\DataFlowServer\Notification\SuccessMessage;
17
use Zend\Diactoros\Response\JsonResponse;
18
use Zend\Hydrator\HydratorInterface;
19
20
final class DeleteConfigAction implements MiddlewareInterface
21
{
22
    /**
23
     * @var LoggerInterface
24
     */
25
    private $logger;
26
    /**
27
     * @var HydratorInterface
28
     */
29
    private $hydrator;
30
    /**
31
     * @var ManagerRegistry
32
     */
33
    private $managerRegistry;
34
35 1
    public function __construct(
36
        ManagerRegistry $managerRegistry,
37
        LoggerInterface $logger,
38
        HydratorInterface $hydrator
39
    ) {
40 1
        $this->managerRegistry = $managerRegistry;
41 1
        $this->logger = $logger;
42 1
        $this->hydrator = $hydrator;
43 1
    }
44
45
    /**
46
     * @inheritdoc
47
     */
48 1
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
49
    {
50 1
        $dbConfig = $request->getAttribute(ResourceMiddlewareInterface::DATA_RESOURCE);
51
52
        try {
53 1
            $em = $this->managerRegistry->getManagerForClass(DbConfiguration::class);
54 1
            $em->remove($dbConfig);
55 1
            $em->flush();
56 1
            return new JsonResponse([
57 1
                'msg' => new SuccessMessage('Configuration removed.'),
58
                'success' => true,
59
                'data' => [
60 1
                    'configuration' => $this->hydrator->extract($dbConfig),
61
                ],
62 1
            ], 200);
63
        } catch (ORMException $exception) {
64
            $this->logger->error((string)$exception);
65
            return new JsonResponse([
66
                'msg' => new DangerMessage('There was an error while removing configuration.'),
67
                'success' => false,
68
                'data' => [
69
                    'configuration' => null
70
                ],
71
            ], 500);
72
        }
73
    }
74
}
75