GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Pull Request — develop (#30)
by Simon
04:09 queued 02:19
created

EventSourcedRepository::saveWithoutPlayheadCheck()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 0
cp 0
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 2
1
<?php
2
namespace SmoothPhp\EventSourcing;
3
4
use SmoothPhp\Contracts\EventBus\EventBus;
5
use SmoothPhp\Contracts\EventSourcing\AggregateRoot as AggregateRootInterface;
6
use SmoothPhp\Contracts\EventStore\EventStore;
7
8
/**
9
 * Class EventSourcedRepository
10
 * @package SmoothPhp\EventSourcing
11
 * @author Simon Bennett <[email protected]>
12
 */
13
abstract class EventSourcedRepository
14
{
15
    /** @var EventStore */
16
    private $eventStore;
17
18
    /** @var EventBus */
19
    private $eventBus;
20
21
22
    /**
23
     * EventSourcedRepository constructor.
24
     * @param EventStore $eventStore
25
     * @param EventBus $eventBus
26
     */
27 6
    public function __construct(EventStore $eventStore, EventBus $eventBus)
28
    {
29 6
        $this->eventStore = $eventStore;
30 6
        $this->eventBus = $eventBus;
31 6
    }
32
33
34
    /**
35
     * @return string
36
     */
37
    abstract protected function getPrefix();
38
39
    /**
40
     * @return string
41
     */
42
    abstract protected function getAggregateType();
43
44
    /**
45
     * @param string $id
46
     * @return AggregateRootInterface
47
     * @throws \SmoothPhp\EventStore\EventStreamNotFound
48 3
     */
49
    public function load($id)
50 3
    {
51 3
        $domainEvents = $this->eventStore->load($this->getPrefix() . $id);
52
        $aggregateClassName = $this->getAggregateType();
53 3
54 3
        $aggregate = unserialize(sprintf( 'O:%d:"%s":0:{}',strlen($aggregateClassName), $aggregateClassName));
55
        $aggregate->initializeState($domainEvents);
56 3
57
        return $aggregate;
58
    }
59
60
    /**
61
     * @param AggregateRootInterface $aggregate
62
     * @return void
63 3
     */
64
    public function save(AggregateRootInterface $aggregate)
65 3
    {
66
        $this->saveAggregate($aggregate,false);
67 3
    }
68
69 3
    /**
70 3
     * @param AggregateRootInterface $aggregate
71
     * @return void
72
     */
73
    public function saveWithoutPlayheadCheck(AggregateRootInterface $aggregate)
74
    {
75
        $this->saveAggregate($aggregate,true);
76
    }
77
78
    /**
79
     * @param AggregateRootInterface $aggregate
80
     * @param bool $ignorePlayhead
81
     */
82
    private function saveAggregate(AggregateRootInterface $aggregate,bool $ignorePlayhead = false)
83
    {
84
        $events = $aggregate->getUncommittedEvents();
85
86
        $this->eventStore->append($aggregate->getAggregateRootId(), $events,$ignorePlayhead);
87
88
        $this->eventBus->publish($events);
89
    }
90
}