Completed
Pull Request — develop (#191)
by A.
08:00 queued 03:32
created

SpecificEventDispatcher::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 5
rs 9.4285
cc 1
eloc 3
nc 1
nop 2
1
<?php
2
3
/**
4
 * Copyright 2017 SURFnet B.V.
5
 *
6
 * Licensed under the Apache License, Version 2.0 (the "License");
7
 * you may not use this file except in compliance with the License.
8
 * You may obtain a copy of the License at
9
 *
10
 *     http://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing, software
13
 * distributed under the License is distributed on an "AS IS" BASIS,
14
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
 * See the License for the specific language governing permissions and
16
 * limitations under the License.
17
 */
18
19
namespace Surfnet\StepupMiddleware\MiddlewareBundle\Service;
20
21
use Exception;
22
use Surfnet\StepupMiddleware\MiddlewareBundle\EventSourcing\DBALEventHydrator;
23
use Surfnet\StepupMiddleware\MiddlewareBundle\EventSourcing\EventCollection;
24
use Surfnet\StepupMiddleware\MiddlewareBundle\EventSourcing\ProjectorCollection;
25
26
final class SpecificEventDispatcher
27
{
28
    /**
29
     * @var DBALConnectionHelper
30
     */
31
    private $connectionHelper;
32
33
    /**
34
     * @var DBALEventHydrator
35
     */
36
    private $eventHydrator;
37
38
    public function __construct(DBALConnectionHelper $connectionHelper, DBALEventHydrator $eventHydrator)
39
    {
40
        $this->connectionHelper = $connectionHelper;
41
        $this->eventHydrator = $eventHydrator;
42
    }
43
44
    public function dispatchEventsForProjectors(
45
        EventCollection $eventCollection,
46
        ProjectorCollection $projectorCollection
47
    ) {
48
        $this->connectionHelper->beginTransaction();
49
50
        try {
51
            $events = $this->eventHydrator->getEventsFrom($eventCollection);
52
53
            foreach ($events as $event) {
54
                foreach ($projectorCollection as $projector) {
55
                    $projector->handle($event);
56
                }
57
            }
58
59
            $this->connectionHelper->commit();
60
        } catch (Exception $exception) {
61
            $this->connectionHelper->rollBack();
62
        }
63
    }
64
}
65