Passed
Push — master ( 240c83...03f39b )
by Mathias
06:41
created

DoctrineMongoLateAdapter   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
wmc 5
eloc 16
dl 0
loc 45
rs 10
c 2
b 0
f 1

3 Methods

Rating   Name   Duplication   Size   Complexity  
A count() 0 3 1
A getItems() 0 8 2
A __construct() 0 10 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Core\Paginator\Adapter;
6
7
8
use Core\Repository\Filter\AbstractPaginationQuery;
9
use Laminas\Paginator\Adapter\AdapterInterface;
10
use Doctrine\ODM\MongoDB\Query\Builder as QueryBuilder;
11
12
/**
13
 * Class DoctrineMongoLateAdapter
14
 *
15
 * TODO: require count to be passed on constructor
16
 * @since 0.36
17
 * @package Core\Paginator\Adapter
18
 */
19
class DoctrineMongoLateAdapter implements AdapterInterface
20
{
21
    /**
22
     * @var QueryBuilder
23
     */
24
    private QueryBuilder $queryBuilder;
25
26
    private $totalItem;
27
28
    /**
29
     * @param QueryBuilder $queryBuilder
30
     * @param AbstractPaginationQuery $filter
31
     * @param array $params
32
     */
33
    public function __construct(QueryBuilder $queryBuilder, AbstractPaginationQuery $filter, $params = array())
34
    {
35
        $this->queryBuilder = $queryBuilder;
36
        $filtered = $filter->createQuery($params, $queryBuilder);
37
        $this->queryBuilder = $queryBuilder;
38
39
        // skip count during tests
40
        if(!is_null($filtered)){
41
            $this->queryBuilder = $filtered;
42
            $this->totalItem = (clone $filtered)->count()->getQuery()->execute();
43
        }
44
45
    }
46
47
    public function getItems($offset, $itemCountPerPage)
48
    {
49
        try {
50
            $qb = $this->queryBuilder;
51
            $qb->skip($offset)->limit($itemCountPerPage);
52
            return $qb->getQuery()->toArray();
53
        }catch (\Exception $e){
54
            throw $e;
55
        }
56
    }
57
58
    /**
59
     * @return int
60
     */
61
    public function count()
62
    {
63
        return $this->totalItem;
64
    }
65
66
}