InMemoryOutboxStorage   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 93
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 3
dl 0
loc 93
ccs 19
cts 19
cp 1
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A get() 0 8 2
A store() 0 10 2
A markAsDispatched() 0 8 2
A beginTransaction() 0 4 1
A commit() 0 4 1
A rollBack() 0 4 1
1
<?php
2
namespace PSB\Core\Persistence\InMemory\Outbox;
3
4
5
use PSB\Core\Exception\InvalidArgumentException;
6
use PSB\Core\Outbox\OutboxMessage;
7
use PSB\Core\Outbox\OutboxStorageInterface;
8
9
class InMemoryOutboxStorage implements OutboxStorageInterface
10
{
11
    /**
12
     * @var InMemoryStoredMessage[]
13
     */
14
    private $messages = [];
15
16
    /**
17
     * @var string
18
     */
19
    private $lastMessageId;
20
21
    /**
22
     * Fetches the given message from the storage. It returns null if no message is found.
23
     *
24
     * @param string $messageId
25
     *
26
     * @return OutboxMessage|null
27
     */
28 4
    public function get($messageId)
29
    {
30 4
        if (!isset($this->messages[$messageId])) {
31 2
            return null;
32
        }
33
34 2
        return new OutboxMessage($messageId, $this->messages[$messageId]->getTransportOperations());
35
    }
36
37
    /**
38
     * Stores the message to enable deduplication and re-dispatching of transport operations.
39
     * Throws an exception if a message with the same ID already exists.
40
     *
41
     * @param OutboxMessage $message
42
     *
43
     * @return void
44
     */
45 4
    public function store(OutboxMessage $message)
46
    {
47 4
        $messageId = $message->getMessageId();
48 4
        if (isset($this->messages[$messageId])) {
49 1
            throw new InvalidArgumentException("Outbox message with ID '$messageId' already exists in storage.");
50
        }
51
52 4
        $this->messages[$messageId] = new InMemoryStoredMessage($messageId, $message->getTransportOperations());
53 4
        $this->lastMessageId = $messageId;
54 4
    }
55
56
    /**
57
     * @param string $messageId
58
     *
59
     * @return void
60
     */
61 2
    public function markAsDispatched($messageId)
62
    {
63 2
        if (!isset($this->messages[$messageId])) {
64 1
            return;
65
        }
66
67 1
        $this->messages[$messageId]->markAsDispatched();
68 1
    }
69
70
    /**
71
     * Initiates the transaction
72
     *
73
     * @return void
74
     * @codeCoverageIgnore
75
     */
76
    public function beginTransaction()
77
    {
78
        // makes no sense for array storage
79
    }
80
81
    /**
82
     * Commits the transaction
83
     *
84
     * @return void
85
     * @codeCoverageIgnore
86
     */
87
    public function commit()
88
    {
89
        // makes no sense for array storage
90
    }
91
92
    /**
93
     * Rolls back the transaction
94
     *
95
     * @return void
96
     */
97 1
    public function rollBack()
98
    {
99 1
        unset($this->messages[$this->lastMessageId]);
100 1
    }
101
}
102