DigitalOceanDatabaseCreator   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 12
c 1
b 0
f 0
dl 0
loc 31
rs 10
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A createDatabase() 0 16 1
A __construct() 0 9 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * Copyright (C) 2020-2025 Iain Cambridge
7
 *
8
 * This program is free software: you can redistribute it and/or modify
9
 * it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE as published by
10
 * the Free Software Foundation, either version 2.1 of the License, or
11
 * (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU Lesser General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
 */
21
22
namespace Parthenon\MultiTenancy\Database;
23
24
use Doctrine\Persistence\ManagerRegistry;
25
use Parthenon\Cloud\DigitalOcean\ClientInterface;
26
use Parthenon\Common\LoggerAwareTrait;
27
use Parthenon\MultiTenancy\Dbal\SchemaToolProviderInterface;
28
use Parthenon\MultiTenancy\Entity\TenantInterface;
29
30
class DigitalOceanDatabaseCreator implements DatabaseCreatorInterface
31
{
32
    use LoggerAwareTrait;
33
34
    public function __construct(
35
        private ClientInterface $client,
36
        private DatabaseSwitcherInterface $databaseSwitcher,
37
        private SchemaToolProviderInterface $schemaToolProvider,
38
        private MigrationsHandlerInterface $migrationsHandler,
39
        private ManagerRegistry $managerRegistry,
40
        private string $entityManagerName,
41
        private string $clusterId,
42
    ) {
43
    }
44
45
    public function createDatabase(TenantInterface $tenant): void
46
    {
47
        $this->getLogger()->info('Creating database', ['cluster_id' => $this->clusterId, 'database' => $tenant->getDatabase()]);
48
        $this->client->database()->createDatabase($this->clusterId, $tenant->getDatabase());
49
        $this->databaseSwitcher->switchToTenant($tenant);
50
51
        $this->getLogger()->info('Creating database schema');
52
        $entityManager = $this->managerRegistry->getManager($this->entityManagerName);
53
        $metaData = $entityManager->getMetadataFactory()->getAllMetadata();
54
55
        $tool = $this->schemaToolProvider->getSchemaTool($entityManager);
56
57
        $tool->createSchema($metaData);
58
59
        $this->getLogger()->info('Inserting migrations');
60
        $this->migrationsHandler->handleMigrations($tenant);
61
    }
62
}
63