GenericSnapshot::getAggregateRoot()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
/*
4
 * event-sourcing (https://github.com/phpgears/event-sourcing).
5
 * Event Sourcing base.
6
 *
7
 * @license MIT
8
 * @link https://github.com/phpgears/event-sourcing
9
 * @author Julián Gutiérrez <[email protected]>
10
 */
11
12
declare(strict_types=1);
13
14
namespace Gears\EventSourcing\Store\Snapshot;
15
16
use Gears\EventSourcing\Aggregate\AggregateRoot;
17
use Gears\EventSourcing\Store\GenericStoreStream;
18
use Gears\EventSourcing\Store\Snapshot\Exception\SnapshotStoreException;
19
use Gears\EventSourcing\Store\StoreStream;
20
21
/**
22
 * Generic Snapshot.
23
 */
24
final class GenericSnapshot implements Snapshot
25
{
26
    /**
27
     * @var StoreStream
28
     */
29
    private $storeStream;
30
31
    /**
32
     * @var AggregateRoot
33
     */
34
    private $aggregateRoot;
35
36
    /**
37
     * GenericSnapshot constructor.
38
     *
39
     * @param AggregateRoot $aggregateRoot
40
     *
41
     * @throws SnapshotStoreException
42
     */
43
    public function __construct(AggregateRoot $aggregateRoot)
44
    {
45
        if ($aggregateRoot->getRecordedAggregateEvents()->count() !== 0
46
            || $aggregateRoot->getRecordedEvents()->count() !== 0
47
        ) {
48
            throw new SnapshotStoreException('Cannot create an snapshot of an Aggregate root with recorded events');
49
        }
50
51
        $this->storeStream = GenericStoreStream::fromAggregateRoot($aggregateRoot);
52
        $this->aggregateRoot = $aggregateRoot;
53
    }
54
55
    /**
56
     * {@inheritdoc}
57
     */
58
    public function getStoreStream(): StoreStream
59
    {
60
        return $this->storeStream;
61
    }
62
63
    /**
64
     * {@inheritdoc}
65
     */
66
    public function getAggregateRoot(): AggregateRoot
67
    {
68
        return $this->aggregateRoot;
69
    }
70
}
71