Completed
Push — feature/database-migrations ( b550b6 )
by Avtandil
02:27
created

SetupDatabase::bootstrap()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 26

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 1
dl 0
loc 26
ccs 0
cts 16
cp 0
crap 2
rs 9.504
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace Longman\TelegramBot\Bootstrap;
5
6
use Illuminate\Database\Capsule\Manager as Capsule;
7
use Illuminate\Database\ConnectionResolver;
8
use Illuminate\Events\Dispatcher;
9
use Longman\TelegramBot\Application;
10
11
use PDO;
12
use function array_filter;
13
use function env;
14
use function extension_loaded;
15
16
class SetupDatabase
17
{
18
    public function bootstrap(Application $app)
19
    {
20
        $config = $this->getConfig();
21
        $capsule = new Capsule($app);
22
        $capsule->addConnection($config);
23
24
        $capsule->setEventDispatcher(new Dispatcher($app));
25
26
        $capsule->setAsGlobal();
27
28
        // $capsule->bootEloquent();
29
30
        $app->instance('db', $capsule);
31
32
        $app->bind('db.connection', function ($app) {
33
            return $app['db']->connection();
34
        });
35
36
        $app->bind('db.resolver', function ($app) {
37
            $resolver = new ConnectionResolver(['default' => $app['db.connection']]);
38
            $resolver->setDefaultConnection('default');
39
            return $resolver;
40
        });
41
42
        $app->enableExternalMySql($capsule->getConnection()->getPdo());
43
    }
44
45
    private function getConfig(): array
46
    {
47
        return [
48
            'driver'         => 'mysql',
49
            'host'           => env('TG_DB_HOST', '127.0.0.1'),
50
            'port'           => env('TG_DB_PORT', '3306'),
51
            'database'       => env('TG_DB_DATABASE', 'forge'),
52
            'username'       => env('TG_DB_USERNAME', 'forge'),
53
            'password'       => env('TG_DB_PASSWORD', ''),
54
            'unix_socket'    => env('TG_DB_SOCKET', ''),
55
            'charset'        => 'utf8mb4',
56
            'collation'      => 'utf8mb4_unicode_ci',
57
            'prefix'         => env('TG_DB_PREFIX', ''),
58
            'prefix_indexes' => true,
59
            'strict'         => env('TG_DB_STRICT', false),
60
            'engine'         => null,
61
            'options'        => extension_loaded('pdo_mysql') ? array_filter([
62
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
63
            ]) : [],
64
        ];
65
    }
66
}
67