Completed
Push — master ( 298ac7...0024da )
by Oleg
12:58
created

DeleteConfigAction::process()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 30
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 4.432

Importance

Changes 0
Metric Value
dl 0
loc 30
ccs 14
cts 20
cp 0.7
rs 8.5806
c 0
b 0
f 0
cc 4
eloc 23
nc 6
nop 2
crap 4.432
1
<?php
2
declare(strict_types=1);
3
4
namespace SlayerBirden\DataFlowServer\Db\Controller;
5
6
use Doctrine\ORM\EntityManagerInterface;
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\Doctrine\Middleware\ResourceMiddlewareInterface;
14
use SlayerBirden\DataFlowServer\Notification\DangerMessage;
15
use SlayerBirden\DataFlowServer\Notification\SuccessMessage;
16
use Zend\Diactoros\Response\JsonResponse;
17
use Zend\Hydrator\ExtractionInterface;
18
19
class DeleteConfigAction implements MiddlewareInterface
20
{
21
    /**
22
     * @var EntityManagerInterface
23
     */
24
    private $entityManager;
25
    /**
26
     * @var LoggerInterface
27
     */
28
    private $logger;
29
    /**
30
     * @var ExtractionInterface
31
     */
32
    private $extraction;
33
34 1
    public function __construct(
35
        EntityManagerInterface $entityManager,
36
        LoggerInterface $logger,
37
        ExtractionInterface $extraction
38
    ) {
39 1
        $this->entityManager = $entityManager;
40 1
        $this->logger = $logger;
41 1
        $this->extraction = $extraction;
42 1
    }
43
44
    /**
45
     * @inheritdoc
46
     */
47 1
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
48
    {
49 1
        $dbConfig = $request->getAttribute(ResourceMiddlewareInterface::DATA_RESOURCE);
50 1
        $deleted = false;
51 1
        $status = 200;
52
53
        try {
54 1
            if ($dbConfig) {
55 1
                $this->entityManager->remove($dbConfig);
56 1
                $this->entityManager->flush();
57 1
                $msg = new SuccessMessage('Configuration removed.');
58 1
                $deleted = true;
59
            } else {
60
                $msg = new DangerMessage('Could not find configuration to delete.');
61
                $status = 404;
62
            }
63
        } catch (ORMException $exception) {
64
            $this->logger->error((string)$exception);
65
            $msg = new DangerMessage('There was an error while removing configuration.');
66
            $status = 400;
67
        }
68
69 1
        return new JsonResponse([
70 1
            'msg' => $msg,
71 1
            'success' => $deleted,
72
            'data' => [
73 1
                'configuration' => !empty($dbConfig) ? $this->extraction->extract($dbConfig) : null
74
            ],
75 1
        ], $status);
76
    }
77
}
78