GetUsersAction::process()   A
last analyzed

Complexity

Conditions 3
Paths 7

Size

Total Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 20
ccs 12
cts 12
cp 1
rs 9.6
c 0
b 0
f 0
cc 3
nc 7
nop 2
crap 3
1
<?php
2
declare(strict_types=1);
3
4
namespace SlayerBirden\DataFlowServer\Domain\Controller;
5
6
use Doctrine\Common\Collections\Selectable;
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\Collection\CriteriaBuilder;
14
use SlayerBirden\DataFlowServer\Doctrine\Hydrator\ListExtractor;
15
use SlayerBirden\DataFlowServer\Stdlib\ResponseFactory;
16
use Zend\Hydrator\HydratorInterface;
17
18
final class GetUsersAction implements MiddlewareInterface
19
{
20
    /**
21
     * @var LoggerInterface
22
     */
23
    private $logger;
24
    /**
25
     * @var HydratorInterface
26
     */
27
    private $hydrator;
28
    /**
29
     * @var Selectable
30
     */
31
    private $userRepository;
32
33 12
    public function __construct(
34
        Selectable $userRepository,
35
        LoggerInterface $logger,
36
        HydratorInterface $hydrator
37
    ) {
38 12
        $this->userRepository = $userRepository;
39 12
        $this->logger = $logger;
40 12
        $this->hydrator = $hydrator;
41 12
    }
42
43
    /**
44
     * @inheritdoc
45
     */
46 12
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
47
    {
48
        try {
49 12
            $users = $this->userRepository->matching((new CriteriaBuilder())($request->getQueryParams()));
50
            // before collection load to count all records without pagination
51 12
            $count = $users->count();
52
53 10
            if ($count > 0) {
54 8
                $arrayUsers = (new ListExtractor())($this->hydrator, $users->toArray());
55 8
                return (new ResponseFactory())('Success', 200, 'users', $arrayUsers, $count);
56
            } else {
57 2
                $msg = 'Could not find users using given conditions.';
58 2
                return (new ResponseFactory())($msg, 404, 'users', [], 0);
59
            }
60 2
        } catch (ORMException $exception) {
61 2
            $this->logger->error((string)$exception);
62 2
            $msg = 'There was an error while fetching users.';
63 2
            return (new ResponseFactory())($msg, 400, 'users', [], 0);
64
        }
65
    }
66
}
67