Completed
Pull Request — master (#66)
by Frank
07:06 queued 04:59
created

retrieveAllAfterVersion()   A

Complexity

Conditions 5
Paths 6

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 30

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 7
c 1
b 0
f 0
nc 6
nop 2
dl 0
loc 13
rs 9.6111
ccs 0
cts 0
cp 0
crap 30
1
<?php
2
3
declare(strict_types=1);
4
5
namespace EventSauce\EventSourcing;
6
7
use Generator;
8
9
final class InMemoryMessageRepository implements MessageRepository
10
{
11
    /**
12
     * @var Message[]
13
     */
14
    private $messages = [];
15
16
    /**
17
     * @var object[]
18
     */
19
    private $lastCommit = [];
20
21
    /**
22
     * @return object[]
23
     */
24 8
    public function lastCommit(): array
25
    {
26 8
        return $this->lastCommit;
27
    }
28
29 8
    public function purgeLastCommit(): void
30
    {
31 8
        $this->lastCommit = [];
32 8
    }
33
34 9
    public function persist(Message ...$messages): void
35
    {
36 9
        $this->lastCommit = [];
37
38
        /* @var Message $event */
39 9
        foreach ($messages as $message) {
40 5
            $this->messages[] = $message;
41 5
            $this->lastCommit[] = $message->event();
42
        }
43 9
    }
44
45 8
    public function retrieveAll(AggregateRootId $id): Generator
46
    {
47 8
        $lastMessage = null;
48 3
49 2
        foreach ($this->messages as $message) {
50
            if ($id->toString() === $message->header(Header::AGGREGATE_ROOT_ID)->toString()) {
51
                yield $message;
52
                $lastMessage = $message;
53 8
            }
54
        }
55
56
        return $lastMessage instanceof Message ? $lastMessage->aggregateVersion() : 0;
57
    }
58
59
    public function retrieveAllAfterVersion(AggregateRootId $id, int $aggregateRootVersion): Generator
60
    {
61
        $lastMessage = null;
62
63
        foreach ($this->messages as $message) {
64
            if ($id->toString() === $message->header(Header::AGGREGATE_ROOT_ID)->toString()
65
                && $message->header(Header::AGGREGATE_ROOT_VERSION) > $aggregateRootVersion) {
66
                yield $message;
67
                $lastMessage = $message;
68
            }
69
        }
70
71
        return $lastMessage instanceof Message ? $lastMessage->aggregateVersion() : 0;
72
    }
73
}
74