Completed
Push — master ( 5c71f2...630401 )
by Oleg
07:36
created

DeleteUserAction   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 78.56%

Importance

Changes 0
Metric Value
wmc 3
lcom 1
cbo 6
dl 0
loc 43
ccs 11
cts 14
cp 0.7856
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 1
A process() 0 14 2
1
<?php
2
declare(strict_types=1);
3
4
namespace SlayerBirden\DataFlowServer\Domain\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\Doctrine\Middleware\ResourceMiddlewareInterface;
14
use SlayerBirden\DataFlowServer\Domain\Entities\User;
15
use SlayerBirden\DataFlowServer\Stdlib\Validation\GeneralErrorResponseFactory;
16
use SlayerBirden\DataFlowServer\Stdlib\Validation\GeneralSuccessResponseFactory;
17
use Zend\Hydrator\HydratorInterface;
18
19
final class DeleteUserAction implements MiddlewareInterface
20
{
21
    /**
22
     * @var LoggerInterface
23
     */
24
    private $logger;
25
    /**
26
     * @var HydratorInterface
27
     */
28
    private $hydrator;
29
    /**
30
     * @var ManagerRegistry
31
     */
32
    private $managerRegistry;
33
34 1
    public function __construct(
35
        ManagerRegistry $managerRegistry,
36
        LoggerInterface $logger,
37
        HydratorInterface $hydrator
38
    ) {
39 1
        $this->managerRegistry = $managerRegistry;
40 1
        $this->logger = $logger;
41 1
        $this->hydrator = $hydrator;
42 1
    }
43
44
    /**
45
     * @inheritdoc
46
     */
47 1
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
48
    {
49 1
        $user = $request->getAttribute(ResourceMiddlewareInterface::DATA_RESOURCE);
50
51
        try {
52 1
            $em = $this->managerRegistry->getManagerForClass(User::class);
53 1
            $em->remove($user);
54 1
            $em->flush();
55 1
            return (new GeneralSuccessResponseFactory())('User was deleted', 'user', $this->hydrator->extract($user));
56
        } catch (ORMException $exception) {
57
            $this->logger->error((string)$exception);
58
            return (new GeneralErrorResponseFactory())('Could not remove the user.', 'user');
59
        }
60
    }
61
}
62