OutboxTablesCreatorFeatureInstallTask::install()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 16
ccs 8
cts 8
cp 1
rs 9.7333
c 0
b 0
f 0
cc 3
nc 4
nop 0
crap 3
1
<?php
2
namespace PSB\Persistence\Doctrine2\Outbox;
3
4
5
use Doctrine\DBAL\Exception\TableExistsException;
6
use Doctrine\DBAL\Schema\Synchronizer\SingleDatabaseSynchronizer;
7
use PSB\Core\Feature\FeatureInstallTaskInterface;
8
use PSB\Persistence\Doctrine2\Outbox\SchemaProvider\OutboxEndpointSchemaProvider;
9
use PSB\Persistence\Doctrine2\Outbox\SchemaProvider\OutboxMessageSchemaProvider;
10
11
class OutboxTablesCreatorFeatureInstallTask implements FeatureInstallTaskInterface
12
{
13
    /**
14
     * @var SingleDatabaseSynchronizer
15
     */
16
    private $databaseSynchronizer;
17
18
    /**
19
     * @var OutboxEndpointSchemaProvider
20
     */
21
    private $endpointSchemaProvider;
22
23
    /**
24
     * @var OutboxMessageSchemaProvider
25
     */
26
    private $messagesSchemaProvider;
27
28
    /**
29
     * @var string
30
     */
31
    private $endpointsTableName;
32
33
    /**
34
     * @var string
35
     */
36
    private $messagesTableName;
37
38
    /**
39
     * @param SingleDatabaseSynchronizer   $databaseSynchronizer
40
     * @param OutboxEndpointSchemaProvider $endpointSchemaProvider
41
     * @param OutboxMessageSchemaProvider  $messagesSchemaProvider
42
     * @param string                       $endpointsTableName
43
     * @param string                       $messagesTableName
44
     */
45 3
    public function __construct(
46
        SingleDatabaseSynchronizer $databaseSynchronizer,
47
        OutboxEndpointSchemaProvider $endpointSchemaProvider,
48
        OutboxMessageSchemaProvider $messagesSchemaProvider,
49
        $endpointsTableName,
50
        $messagesTableName
51
    ) {
52 3
        $this->databaseSynchronizer = $databaseSynchronizer;
53 3
        $this->endpointSchemaProvider = $endpointSchemaProvider;
54 3
        $this->messagesSchemaProvider = $messagesSchemaProvider;
55 3
        $this->endpointsTableName = $endpointsTableName;
56 3
        $this->messagesTableName = $messagesTableName;
57 3
    }
58
59 2
    public function install()
60
    {
61 2
        $messageSchema = $this->messagesSchemaProvider->getSchemaFor($this->messagesTableName);
62 2
        $endpointSchema = $this->endpointSchemaProvider->getSchemaFor($this->endpointsTableName);
63
64
        // is there a better way to atomically create in order to not compete with other endpoints?
65
        try {
66 2
            $this->databaseSynchronizer->createSchema($messageSchema);
67 1
        } catch (TableExistsException $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
68
        }
69
70
        try {
71 2
            $this->databaseSynchronizer->createSchema($endpointSchema);
72 1
        } catch (TableExistsException $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
73
        }
74 2
    }
75
}
76