EventQuery   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 84
rs 10
c 0
b 0
f 0
wmc 8

5 Methods

Rating   Name   Duplication   Size   Complexity  
A fromAggregates() 0 9 2
A query() 0 11 2
A fromAggregate() 0 5 2
A streamCount() 0 3 1
A __construct() 0 5 1
1
<?php
2
/**
3
 * This file is part of the Simple EventStore Manager package.
4
 *
5
 * (c) Mauro Cassani<https://github.com/mauretto78>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
namespace SimpleEventStoreManager\Application\Event;
12
13
use ArrayQuery\QueryBuilder;
14
use SimpleEventStoreManager\Domain\Model\AggregateUuid;
15
use SimpleEventStoreManager\Domain\Model\Contracts\EventStoreRepositoryInterface;
16
17
class EventQuery
18
{
19
    /**
20
     * @var EventManager
21
     */
22
    private $eventManger;
23
24
    /**
25
     * @var EventStoreRepositoryInterface
26
     */
27
    private $repo;
28
29
    /**
30
     * @var int
31
     */
32
    private $returnType;
33
34
    /**
35
     * EventQuery constructor.
36
     *
37
     * @param EventManager $eventManger
38
     */
39
    public function __construct(EventManager $eventManger)
40
    {
41
        $this->eventManger = $eventManger;
42
        $this->repo = $eventManger->getRepo();
43
        $this->returnType = $eventManger->getReturnType();
44
    }
45
46
    /**
47
     * @param $uuid
48
     *
49
     * @return array
50
     */
51
    public function fromAggregate($uuid)
52
    {
53
        $stream = $this->repo->byUuid(new AggregateUuid($uuid), $this->returnType);
54
55
        return ($stream) ?: [];
56
    }
57
58
    /**
59
     * @param array $uuids
60
     *
61
     * @return array
62
     */
63
    public function fromAggregates(array $uuids)
64
    {
65
        $streams = [];
66
67
        foreach ($uuids as $uuid) {
68
            $streams = array_merge($streams, $this->fromAggregate($uuid));
69
        }
70
71
        return $streams;
72
    }
73
74
    /**
75
     * @param array $stream
76
     * @param array $filters
77
     *
78
     * @return array
79
     */
80
    public function query(array $stream, array $filters = [])
81
    {
82
        $qb = QueryBuilder::create((array)$stream);
83
84
        foreach ($filters as $key => $value) {
85
            $qb->addCriterion($key, $value);
86
        }
87
88
        $qb->sortedBy('occurred_on', 'ASC');
89
90
        return $qb->getResults();
91
    }
92
93
    /**
94
     * @param $uuid
95
     *
96
     * @return mixed
97
     */
98
    public function streamCount($uuid)
99
    {
100
        return $this->repo->count(new AggregateUuid($uuid));
101
    }
102
}
103