-
-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathClickhouseServiceProvider.php
118 lines (102 loc) · 3.55 KB
/
ClickhouseServiceProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
/*
* This file is part of Laravel ClickHouse.
*
* (c) Anton Komarev <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Cog\Laravel\Clickhouse;
use ClickHouseDB\Client as ClickhouseClient;
use Cog\Laravel\Clickhouse\ConsoleCommand\ClickhouseMigrateCommand;
use Cog\Laravel\Clickhouse\ConsoleCommand\MakeClickhouseMigrationCommand;
use Cog\Laravel\Clickhouse\Factory\ClickhouseClientFactory;
use Cog\Laravel\Clickhouse\Migration\MigrationCreator;
use Cog\Laravel\Clickhouse\Migration\MigrationRepository;
use Cog\Laravel\Clickhouse\Migration\Migrator;
use Illuminate\Contracts\Config\Repository as AppConfigRepositoryInterface;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Foundation\Application;
use Illuminate\Support\ServiceProvider;
final class ClickhouseServiceProvider extends ServiceProvider
{
private const CONFIG_FILE_PATH = __DIR__ . '/../config/clickhouse.php';
public function register(): void
{
$this->app->singleton(
ClickhouseClient::class,
static function (Application $app): ClickhouseClient {
$appConfigRepository = $app->get(AppConfigRepositoryInterface::class);
$connectionConfig = $appConfigRepository->get('clickhouse.connection', []);
$clickhouseClientFactory = new ClickhouseClientFactory($connectionConfig);
return $clickhouseClientFactory->create();
},
);
$this->app->singleton(
Migrator::class,
static function (Application $app): Migrator {
$client = $app->get(ClickhouseClient::class);
$filesystem = $app->get(Filesystem::class);
$appConfigRepository = $app->get(AppConfigRepositoryInterface::class);
$table = $appConfigRepository->get('clickhouse.migrations.table');
$repository = new MigrationRepository(
$client,
$table,
);
return new Migrator(
$client,
$repository,
$filesystem,
);
},
);
$this->app->singleton(
MigrationCreator::class,
static function (Application $app): MigrationCreator {
return new MigrationCreator(
$app->get(Filesystem::class),
$app->basePath('stubs'),
);
},
);
}
public function boot(): void
{
$this->configure();
$this->registerConsoleCommands();
$this->registerPublishes();
}
private function configure(): void
{
if (!$this->app->configurationIsCached()) {
$this->mergeConfigFrom(
self::CONFIG_FILE_PATH,
'clickhouse',
);
}
}
private function registerConsoleCommands(): void
{
if ($this->app->runningInConsole()) {
$this->commands(
[
ClickhouseMigrateCommand::class,
MakeClickhouseMigrationCommand::class,
],
);
}
}
private function registerPublishes(): void
{
if ($this->app->runningInConsole()) {
$this->publishes(
[
self::CONFIG_FILE_PATH => $this->app->configPath('clickhouse.php'),
],
'config',
);
}
}
}