|
13 | 13 |
|
14 | 14 | namespace Laudis\Neo4j;
|
15 | 15 |
|
16 |
| -use function array_key_exists; |
17 |
| -use InvalidArgumentException; |
| 16 | +use Laudis\Neo4j\Common\DriverSetupManager; |
18 | 17 | use Laudis\Neo4j\Contracts\ClientInterface;
|
19 | 18 | use Laudis\Neo4j\Contracts\DriverInterface;
|
20 |
| -use Laudis\Neo4j\Contracts\FormatterInterface; |
21 | 19 | use Laudis\Neo4j\Contracts\SessionInterface;
|
22 | 20 | use Laudis\Neo4j\Contracts\UnmanagedTransactionInterface;
|
23 |
| -use Laudis\Neo4j\Databags\DriverConfiguration; |
24 |
| -use Laudis\Neo4j\Databags\DriverSetup; |
25 | 21 | use Laudis\Neo4j\Databags\SessionConfiguration;
|
26 | 22 | use Laudis\Neo4j\Databags\Statement;
|
27 | 23 | use Laudis\Neo4j\Databags\TransactionConfiguration;
|
|
37 | 33 | */
|
38 | 34 | final class Client implements ClientInterface
|
39 | 35 | {
|
40 |
| - private const DEFAULT_DRIVER_CONFIG = 'bolt://localhost:7687'; |
41 |
| - /** @var non-empty-array<string, DriverInterface<ResultFormat>> */ |
42 |
| - private array $drivers; |
43 |
| - /** @psalm-readonly */ |
44 |
| - private ?string $default; |
45 | 36 | private SessionConfiguration $defaultSessionConfiguration;
|
46 | 37 | private TransactionConfiguration $defaultTransactionConfiguration;
|
| 38 | + /** @var DriverSetupManager<ResultFormat> */ |
| 39 | + private DriverSetupManager $driverSetups; |
47 | 40 |
|
48 | 41 | /**
|
49 | 42 | * @psalm-mutation-free
|
50 | 43 | *
|
51 |
| - * @param array<string, DriverSetup> $driverSetups |
52 |
| - * @param FormatterInterface<ResultFormat> $formatter |
| 44 | + * @param DriverSetupManager<ResultFormat> $driverSetups |
53 | 45 | */
|
54 |
| - public function __construct(array $driverSetups, DriverConfiguration $defaultDriverConfiguration, SessionConfiguration $defaultSessionConfiguration, TransactionConfiguration $defaultTransactionConfiguration, FormatterInterface $formatter, ?string $default) |
55 |
| - { |
56 |
| - $this->default = $default; |
57 |
| - $this->drivers = $this->createDrivers($driverSetups, $formatter, $defaultDriverConfiguration); |
| 46 | + public function __construct( |
| 47 | + DriverSetupManager $driverSetups, |
| 48 | + SessionConfiguration $defaultSessionConfiguration, |
| 49 | + TransactionConfiguration $defaultTransactionConfiguration |
| 50 | + ) { |
58 | 51 | $this->defaultSessionConfiguration = $defaultSessionConfiguration;
|
59 | 52 | $this->defaultTransactionConfiguration = $defaultTransactionConfiguration;
|
| 53 | + $this->driverSetups = $driverSetups; |
60 | 54 | }
|
61 | 55 |
|
62 | 56 | public function run(string $statement, iterable $parameters = [], ?string $alias = null)
|
@@ -84,23 +78,12 @@ public function beginTransaction(?iterable $statements = null, ?string $alias =
|
84 | 78 | return $session->beginTransaction($statements, $config);
|
85 | 79 | }
|
86 | 80 |
|
87 |
| - /** |
88 |
| - * @psalm-mutation-free |
89 |
| - */ |
90 | 81 | public function getDriver(?string $alias): DriverInterface
|
91 | 82 | {
|
92 |
| - $alias = $this->decideAlias($alias); |
93 |
| - |
94 |
| - if (!array_key_exists($alias, $this->drivers)) { |
95 |
| - throw new InvalidArgumentException(sprintf('The provided alias: "%s" was not found in the client', $alias)); |
96 |
| - } |
97 |
| - |
98 |
| - return $this->drivers[$alias]; |
| 83 | + return $this->driverSetups->getDriver($alias); |
99 | 84 | }
|
100 | 85 |
|
101 | 86 | /**
|
102 |
| - * @psalm-mutation-free |
103 |
| - * |
104 | 87 | * @return SessionInterface<ResultFormat>
|
105 | 88 | */
|
106 | 89 | private function startSession(?string $alias, SessionConfiguration $configuration): SessionInterface
|
@@ -131,41 +114,7 @@ public function transaction(callable $tsxHandler, ?string $alias = null, ?Transa
|
131 | 114 |
|
132 | 115 | public function verifyConnectivity(?string $driver = null): bool
|
133 | 116 | {
|
134 |
| - return $this->getDriver($driver)->verifyConnectivity(); |
135 |
| - } |
136 |
| - |
137 |
| - /** |
138 |
| - * @psalm-mutation-free |
139 |
| - */ |
140 |
| - private function decideAlias(?string $alias): string |
141 |
| - { |
142 |
| - return $alias ?? $this->default ?? array_key_first($this->drivers); |
143 |
| - } |
144 |
| - |
145 |
| - /** |
146 |
| - * @psalm-mutation-free |
147 |
| - * |
148 |
| - * @param array<string, DriverSetup> $driverSetups |
149 |
| - * @param FormatterInterface<ResultFormat> $formatter |
150 |
| - * |
151 |
| - * @return non-empty-array<string, DriverInterface<ResultFormat>> |
152 |
| - */ |
153 |
| - private function createDrivers(array $driverSetups, FormatterInterface $formatter, DriverConfiguration $configuration): array |
154 |
| - { |
155 |
| - if (count($driverSetups) === 0) { |
156 |
| - $drivers = ['default' => DriverFactory::create(self::DEFAULT_DRIVER_CONFIG, null, null, $formatter)]; |
157 |
| - } else { |
158 |
| - $drivers = []; |
159 |
| - foreach ($driverSetups as $alias => $setup) { |
160 |
| - $uri = $setup->getUri(); |
161 |
| - $auth = $setup->getAuth(); |
162 |
| - |
163 |
| - $drivers[$alias] = DriverFactory::create($uri, $configuration, $auth, $formatter); |
164 |
| - } |
165 |
| - } |
166 |
| - |
167 |
| - /** @var non-empty-array<string, DriverInterface<ResultFormat>> */ |
168 |
| - return $drivers; |
| 117 | + return $this->driverSetups->verifyConnectivity($driver); |
169 | 118 | }
|
170 | 119 |
|
171 | 120 | private function getTsxConfig(?TransactionConfiguration $config): TransactionConfiguration
|
|
0 commit comments