• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

prooph / event-store-client / 9555551525

17 Jun 2024 10:16PM UTC coverage: 70.262% (-1.1%) from 71.395%
9555551525

push

github

prolic
update coveralls repo token

3466 of 4933 relevant lines covered (70.26%)

67.7 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.0
/src/ClientOperations/ReadAllEventsForwardOperation.php
1
<?php
2

3
/**
4
 * This file is part of `prooph/event-store-client`.
5
 * (c) 2018-2024 Alexander Miertsch <kontakt@codeliner.ws>
6
 * (c) 2018-2024 Sascha-Oliver Prolic <saschaprolic@googlemail.com>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11

12
declare(strict_types=1);
13

14
namespace Prooph\EventStoreClient\ClientOperations;
15

16
use Amp\DeferredFuture;
17
use Google\Protobuf\Internal\Message;
18
use Prooph\EventStore\AllEventsSlice;
19
use Prooph\EventStore\Exception\AccessDenied;
20
use Prooph\EventStore\Exception\ServerError;
21
use Prooph\EventStore\Position;
22
use Prooph\EventStore\ReadDirection;
23
use Prooph\EventStore\ResolvedEvent;
24
use Prooph\EventStore\UserCredentials;
25
use Prooph\EventStoreClient\Internal\EventMessageConverter;
26
use Prooph\EventStoreClient\Messages\ClientMessages\ReadAllEvents;
27
use Prooph\EventStoreClient\Messages\ClientMessages\ReadAllEventsCompleted;
28
use Prooph\EventStoreClient\Messages\ClientMessages\ReadAllEventsCompleted\ReadAllResult;
29
use Prooph\EventStoreClient\SystemData\InspectionDecision;
30
use Prooph\EventStoreClient\SystemData\InspectionResult;
31
use Prooph\EventStoreClient\SystemData\TcpCommand;
32
use Psr\Log\LoggerInterface as Logger;
33

34
/**
35
 * @internal
36
 * @extends AbstractOperation<ReadAllEventsCompleted, AllEventsSlice>
37
 */
38
class ReadAllEventsForwardOperation extends AbstractOperation
39
{
40
    public function __construct(
41
        Logger $logger,
42
        DeferredFuture $deferred,
43
        private readonly bool $requireMaster,
44
        private readonly Position $position,
45
        private readonly int $maxCount,
46
        private readonly bool $resolveLinkTos,
47
        ?UserCredentials $userCredentials
48
    ) {
49
        parent::__construct(
19✔
50
            $logger,
19✔
51
            $deferred,
19✔
52
            $userCredentials,
19✔
53
            TcpCommand::ReadAllEventsForward,
19✔
54
            TcpCommand::ReadAllEventsForwardCompleted,
19✔
55
            ReadAllEventsCompleted::class
19✔
56
        );
19✔
57
    }
58

59
    protected function createRequestDto(): Message
60
    {
61
        $message = new ReadAllEvents();
18✔
62
        $message->setRequireMaster($this->requireMaster);
18✔
63
        $message->setCommitPosition($this->position->commitPosition());
18✔
64
        $message->setPreparePosition($this->position->preparePosition());
18✔
65
        $message->setMaxCount($this->maxCount);
18✔
66
        $message->setResolveLinkTos($this->resolveLinkTos);
18✔
67

68
        return $message;
18✔
69
    }
70

71
    /**
72
     * @param ReadAllEventsCompleted $response
73
     * @return InspectionResult
74
     */
75
    protected function inspectResponse(Message $response): InspectionResult
76
    {
77
        switch ($response->getResult()) {
16✔
78
            case ReadAllResult::Success:
16✔
79
                $this->succeed($response);
13✔
80

81
                return new InspectionResult(InspectionDecision::EndOperation, 'Success');
13✔
82
            case ReadAllResult::Error:
3✔
83
                $this->fail(new ServerError($response->getError()));
×
84

85
                return new InspectionResult(InspectionDecision::EndOperation, 'Error');
×
86
            case ReadAllResult::AccessDenied:
3✔
87
                $this->fail(AccessDenied::toAllStream());
3✔
88

89
                return new InspectionResult(InspectionDecision::EndOperation, 'AccessDenied');
3✔
90
            default:
91
                throw new ServerError('Unexpected ReadAllResult');
×
92
        }
93
    }
94

95
    /**
96
     * @param ReadAllEventsCompleted $response
97
     * @return AllEventsSlice
98
     */
99
    protected function transformResponse(Message $response): AllEventsSlice
100
    {
101
        $resolvedEvents = [];
13✔
102

103
        foreach ($response->getEvents() as $record) {
13✔
104
            $resolvedEvents[] = new ResolvedEvent(
12✔
105
                EventMessageConverter::convertEventRecordMessageToEventRecord($record->getEvent()),
12✔
106
                EventMessageConverter::convertEventRecordMessageToEventRecord($record->getLink()),
12✔
107
                new Position(
12✔
108
                    $record->getCommitPosition(),
12✔
109
                    $record->getPreparePosition()
12✔
110
                )
12✔
111
            );
12✔
112
        }
113

114
        return new AllEventsSlice(
13✔
115
            ReadDirection::Forward,
13✔
116
            new Position((int) $response->getCommitPosition(), (int) $response->getPreparePosition()),
13✔
117
            new Position((int) $response->getNextCommitPosition(), (int) $response->getNextPreparePosition()),
13✔
118
            $resolvedEvents
13✔
119
        );
13✔
120
    }
121

122
    public function name(): string
123
    {
124
        return 'ReadAllEventsForward';
18✔
125
    }
126

127
    public function __toString(): string
128
    {
129
        return \sprintf(
18✔
130
            'Position: %s, MaxCount: %d, ResolveLinkTos: %s, RequireMaster: %s',
18✔
131
            (string) $this->position,
18✔
132
            $this->maxCount,
18✔
133
            $this->resolveLinkTos ? 'yes' : 'no',
18✔
134
            $this->requireMaster ? 'yes' : 'no'
18✔
135
        );
18✔
136
    }
137
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc