Passed
Push — master ( f32054...0e8b83 )
by Tarmo
107:11 queued 42:11
created

Version20191006091354   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 298
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 241
c 0
b 0
f 0
dl 0
loc 298
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getDescription() 0 3 1
A isTransactional() 0 3 1
B up() 0 234 1
A down() 0 36 1
1
<?php
2
3
declare(strict_types = 1);
4
5
// phpcs:ignoreFile
6
/** @noinspection PhpIllegalPsrClassPathInspection */
7
8
namespace DoctrineMigrations;
9
10
use Doctrine\DBAL\DBALException;
11
use Doctrine\DBAL\Schema\Schema;
12
use Doctrine\Migrations\AbstractMigration;
13
14
/**
15
 * Auto-generated Migration: Please modify to your needs!
16
 */
17
final class Version20191006091354 extends AbstractMigration
18
{
19
    /**
20
     * @noinspection PhpMissingParentCallCommonInspection
21
     */
22
    public function getDescription(): string
23
    {
24
        return 'Initial database structure';
25
    }
26
27
    /**
28
     * @noinspection PhpMissingParentCallCommonInspection
29
     */
30
    public function isTransactional(): bool
31
    {
32
        return false;
33
    }
34
35
    /**
36
     * @throws DBALException
37
     */
38
    public function up(Schema $schema): void
39
    {
40
        // this up() migration is auto-generated, please modify it to your needs
41
        $this->abortIf(
42
            $this->connection->getDatabasePlatform()->getName() !== 'mysql',
43
            'Migration can only be executed safely on \'mysql\'.'
44
        );
45
46
        $sqlRole = <<<SQL
47
CREATE TABLE role (
48
    role VARCHAR(255) NOT NULL, 
49
    description LONGTEXT NOT NULL, 
50
    created_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)', 
51
    updated_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)', 
52
    created_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
53
    updated_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
54
    INDEX IDX_57698A6AB03A8386 (created_by_id), 
55
    INDEX IDX_57698A6A896DBBDE (updated_by_id), 
56
    UNIQUE INDEX uq_role (role), 
57
    PRIMARY KEY(role)
58
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
59
SQL;
60
61
        $this->addSql($sqlRole);
62
63
        $sqlUserGroup = <<<SQL
64
CREATE TABLE user_group (
65
    id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
66
    role VARCHAR(255) DEFAULT NULL, 
67
    name VARCHAR(255) NOT NULL, 
68
    created_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)', 
69
    updated_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)', 
70
    created_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
71
    updated_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
72
    INDEX IDX_8F02BF9D57698A6A (role), 
73
    INDEX IDX_8F02BF9DB03A8386 (created_by_id),
74
    INDEX IDX_8F02BF9D896DBBDE (updated_by_id), 
75
    PRIMARY KEY(id)
76
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
77
SQL;
78
79
        $this->addSql($sqlUserGroup);
80
81
        $sqlUser = <<<SQL
82
CREATE TABLE user (
83
    id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
84
    username VARCHAR(255) NOT NULL, 
85
    first_name VARCHAR(255) NOT NULL, 
86
    last_name VARCHAR(255) NOT NULL, 
87
    email VARCHAR(255) NOT NULL, 
88
    password VARCHAR(255) NOT NULL, 
89
    created_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)', 
90
    updated_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)', 
91
    created_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
92
    updated_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
93
    INDEX IDX_8D93D649B03A8386 (created_by_id), 
94
    INDEX IDX_8D93D649896DBBDE (updated_by_id), 
95
    UNIQUE INDEX uq_username (username), 
96
    UNIQUE INDEX uq_email (email), 
97
    PRIMARY KEY(id)
98
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
99
SQL;
100
101
        $this->addSql($sqlUser);
102
103
        $sqlApiKey = <<<SQL
104
CREATE TABLE api_key (
105
    id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
106
    token VARCHAR(40) NOT NULL, 
107
    description LONGTEXT NOT NULL, 
108
    created_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)', 
109
    updated_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)', 
110
    created_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
111
    updated_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
112
    INDEX IDX_C912ED9DB03A8386 (created_by_id), 
113
    INDEX IDX_C912ED9D896DBBDE (updated_by_id), 
114
    UNIQUE INDEX uq_token (token), 
115
    PRIMARY KEY(id)
116
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
117
SQL;
118
119
        $this->addSql($sqlApiKey);
120
121
        $sqlUserHasUserGroup = <<<SQL
122
CREATE TABLE user_has_user_group (
123
    user_id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
124
    user_group_id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
125
    INDEX IDX_2C59957A76ED395 (user_id), 
126
    INDEX IDX_2C599571ED93D47 (user_group_id), 
127
    PRIMARY KEY(user_id, user_group_id)
128
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
129
SQL;
130
131
        $this->addSql($sqlUserHasUserGroup);
132
133
        $sqlApiKeyHasUserGroup = <<<SQL
134
CREATE TABLE api_key_has_user_group (
135
    api_key_id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
136
    user_group_id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
137
    INDEX IDX_E2D0E7F98BE312B3 (api_key_id), 
138
    INDEX IDX_E2D0E7F91ED93D47 (user_group_id), 
139
    PRIMARY KEY(api_key_id, user_group_id)
140
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
141
SQL;
142
143
        $this->addSql($sqlApiKeyHasUserGroup);
144
145
        $sqlLogLogin = <<<SQL
146
CREATE TABLE log_login (
147
    id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
148
    user_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
149
    type ENUM('failure', 'success') NOT NULL COMMENT '(DC2Type:EnumLogLogin)', 
150
    http_host VARCHAR(255) NOT NULL, 
151
    client_ip VARCHAR(255) NOT NULL, 
152
    client_type VARCHAR(255) DEFAULT NULL, 
153
    client_name VARCHAR(255) DEFAULT NULL, 
154
    client_short_name VARCHAR(255) DEFAULT NULL, 
155
    client_version VARCHAR(255) DEFAULT NULL, 
156
    client_engine VARCHAR(255) DEFAULT NULL, 
157
    os_name VARCHAR(255) DEFAULT NULL, 
158
    os_short_name VARCHAR(255) DEFAULT NULL, 
159
    os_version VARCHAR(255) DEFAULT NULL, 
160
    os_platform VARCHAR(255) DEFAULT NULL, 
161
    device_name VARCHAR(255) DEFAULT NULL, 
162
    brand_name VARCHAR(255) DEFAULT NULL, 
163
    model VARCHAR(255) DEFAULT NULL, 
164
    agent LONGTEXT NOT NULL, 
165
    `date` DATE NOT NULL COMMENT '(DC2Type:date_immutable)', 
166
    time DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', 
167
    INDEX user_id (user_id), 
168
    INDEX date (date), 
169
    PRIMARY KEY(id)
170
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
171
SQL;
172
173
        $this->addSql($sqlLogLogin);
174
175
        $sqlLogRequest = <<<SQL
176
CREATE TABLE log_request (
177
    id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
178
    user_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
179
    api_key_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
180
    status_code INT NOT NULL, 
181
    controller VARCHAR(255) DEFAULT NULL, 
182
    action VARCHAR(255) DEFAULT NULL, 
183
    method VARCHAR(255) NOT NULL, 
184
    scheme VARCHAR(5) NOT NULL, 
185
    uri LONGTEXT NOT NULL, 
186
    script VARCHAR(255) NOT NULL, 
187
    base_path VARCHAR(255) NOT NULL, 
188
    path VARCHAR(255) DEFAULT NULL, 
189
    query_string LONGTEXT DEFAULT NULL, 
190
    agent LONGTEXT NOT NULL, 
191
    response_content_length INT NOT NULL, 
192
    http_host VARCHAR(255) NOT NULL, 
193
    client_ip VARCHAR(255) NOT NULL, 
194
    headers LONGTEXT NOT NULL COMMENT '(DC2Type:array)', 
195
    parameters LONGTEXT NOT NULL COMMENT '(DC2Type:array)', 
196
    content LONGTEXT DEFAULT NULL, 
197
    content_type VARCHAR(255) DEFAULT NULL, 
198
    content_type_short VARCHAR(255) DEFAULT NULL, 
199
    is_master_request TINYINT(1) NOT NULL, 
200
    is_xml_http_request TINYINT(1) NOT NULL, 
201
    `date` DATE NOT NULL COMMENT '(DC2Type:date_immutable)', 
202
    time DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', 
203
    INDEX user_id (user_id), 
204
    INDEX api_key_id (api_key_id), 
205
    INDEX request_date (date), 
206
    PRIMARY KEY(id)
207
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
208
SQL;
209
210
        $this->addSql($sqlLogRequest);
211
212
        $sqlLogLoginFailure = <<<SQL
213
CREATE TABLE log_login_failure (
214
    id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
215
    user_id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
216
    timestamp DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', 
217
    INDEX user_id (user_id), 
218
    PRIMARY KEY(id)
219
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
220
SQL;
221
222
        $this->addSql($sqlLogLoginFailure);
223
224
        $sqlHealthz = <<<SQL
225
CREATE TABLE healthz (
226
    id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
227
    timestamp DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', 
228
    PRIMARY KEY(id)
229
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
230
SQL;
231
232
        $this->addSql($sqlHealthz);
233
234
        $sqlDateDimension = <<<SQL
235
CREATE TABLE date_dimension (
236
    id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)', 
237
    date DATE NOT NULL, 
238
    year INT NOT NULL COMMENT 'A full numeric representation of a year, 4 digits', 
239
    month INT NOT NULL COMMENT 'Day of the month without leading zeros; 1 to 12', 
240
    day INT NOT NULL COMMENT 'Day of the month without leading zeros; 1 to 31', 
241
    quarter INT NOT NULL COMMENT 'Calendar quarter; 1, 2, 3 or 4', 
242
    week_number INT NOT NULL COMMENT 'ISO-8601 week number of year, weeks starting on Monday', 
243
    day_number_of_week INT NOT NULL COMMENT 'ISO-8601 numeric representation of the day of the week; 1 (for Monday) to 7 (for Sunday)', 
244
    day_number_of_year INT NOT NULL COMMENT 'The day of the year (starting from 0); 0 through 365', 
245
    leap_year TINYINT(1) NOT NULL COMMENT 'Whether it''s a leap year', 
246
    week_numbering_year INT NOT NULL COMMENT 'ISO-8601 week-numbering year.', 
247
    unix_time BIGINT NOT NULL COMMENT 'Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)', 
248
    INDEX date (date), 
249
    PRIMARY KEY(id)
250
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
251
SQL;
252
253
        $this->addSql($sqlDateDimension);
254
255
        $this->addSql('ALTER TABLE user_group ADD CONSTRAINT FK_8F02BF9D57698A6A FOREIGN KEY (role) REFERENCES role (role) ON DELETE CASCADE');
256
        $this->addSql('ALTER TABLE user_group ADD CONSTRAINT FK_8F02BF9DB03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL');
257
        $this->addSql('ALTER TABLE user_group ADD CONSTRAINT FK_8F02BF9D896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL');
258
        $this->addSql('ALTER TABLE log_login ADD CONSTRAINT FK_8A76204DA76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE SET NULL');
259
        $this->addSql('ALTER TABLE api_key ADD CONSTRAINT FK_C912ED9DB03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL');
260
        $this->addSql('ALTER TABLE api_key ADD CONSTRAINT FK_C912ED9D896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL');
261
        $this->addSql('ALTER TABLE api_key_has_user_group ADD CONSTRAINT FK_E2D0E7F98BE312B3 FOREIGN KEY (api_key_id) REFERENCES api_key (id) ON DELETE CASCADE');
262
        $this->addSql('ALTER TABLE api_key_has_user_group ADD CONSTRAINT FK_E2D0E7F91ED93D47 FOREIGN KEY (user_group_id) REFERENCES user_group (id) ON DELETE CASCADE');
263
        $this->addSql('ALTER TABLE user ADD CONSTRAINT FK_8D93D649B03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL');
264
        $this->addSql('ALTER TABLE user ADD CONSTRAINT FK_8D93D649896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL');
265
        $this->addSql('ALTER TABLE user_has_user_group ADD CONSTRAINT FK_2C59957A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE');
266
        $this->addSql('ALTER TABLE user_has_user_group ADD CONSTRAINT FK_2C599571ED93D47 FOREIGN KEY (user_group_id) REFERENCES user_group (id) ON DELETE CASCADE');
267
        $this->addSql('ALTER TABLE role ADD CONSTRAINT FK_57698A6AB03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL');
268
        $this->addSql('ALTER TABLE role ADD CONSTRAINT FK_57698A6A896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL');
269
        $this->addSql('ALTER TABLE log_request ADD CONSTRAINT FK_35AB708A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE SET NULL');
270
        $this->addSql('ALTER TABLE log_request ADD CONSTRAINT FK_35AB7088BE312B3 FOREIGN KEY (api_key_id) REFERENCES api_key (id) ON DELETE SET NULL');
271
        $this->addSql('ALTER TABLE log_login_failure ADD CONSTRAINT FK_EDB4AF3A76ED395 FOREIGN KEY (user_id) REFERENCES user (id)');
272
    }
273
274
    /**
275
     * @noinspection PhpMissingParentCallCommonInspection
276
     *
277
     * @throws DBALException
278
     */
279
    public function down(Schema $schema): void
280
    {
281
        // this down() migration is auto-generated, please modify it to your needs
282
        $this->abortIf(
283
            $this->connection->getDatabasePlatform()->getName() !== 'mysql',
284
            'Migration can only be executed safely on \'mysql\'.'
285
        );
286
287
        $this->addSql('ALTER TABLE api_key_has_user_group DROP FOREIGN KEY FK_E2D0E7F91ED93D47');
288
        $this->addSql('ALTER TABLE user_has_user_group DROP FOREIGN KEY FK_2C599571ED93D47');
289
        $this->addSql('ALTER TABLE api_key_has_user_group DROP FOREIGN KEY FK_E2D0E7F98BE312B3');
290
        $this->addSql('ALTER TABLE log_request DROP FOREIGN KEY FK_35AB7088BE312B3');
291
        $this->addSql('ALTER TABLE user_group DROP FOREIGN KEY FK_8F02BF9DB03A8386');
292
        $this->addSql('ALTER TABLE user_group DROP FOREIGN KEY FK_8F02BF9D896DBBDE');
293
        $this->addSql('ALTER TABLE log_login DROP FOREIGN KEY FK_8A76204DA76ED395');
294
        $this->addSql('ALTER TABLE api_key DROP FOREIGN KEY FK_C912ED9DB03A8386');
295
        $this->addSql('ALTER TABLE api_key DROP FOREIGN KEY FK_C912ED9D896DBBDE');
296
        $this->addSql('ALTER TABLE user DROP FOREIGN KEY FK_8D93D649B03A8386');
297
        $this->addSql('ALTER TABLE user DROP FOREIGN KEY FK_8D93D649896DBBDE');
298
        $this->addSql('ALTER TABLE user_has_user_group DROP FOREIGN KEY FK_2C59957A76ED395');
299
        $this->addSql('ALTER TABLE role DROP FOREIGN KEY FK_57698A6AB03A8386');
300
        $this->addSql('ALTER TABLE role DROP FOREIGN KEY FK_57698A6A896DBBDE');
301
        $this->addSql('ALTER TABLE log_request DROP FOREIGN KEY FK_35AB708A76ED395');
302
        $this->addSql('ALTER TABLE log_login_failure DROP FOREIGN KEY FK_EDB4AF3A76ED395');
303
        $this->addSql('ALTER TABLE user_group DROP FOREIGN KEY FK_8F02BF9D57698A6A');
304
        $this->addSql('DROP TABLE healthz');
305
        $this->addSql('DROP TABLE user_group');
306
        $this->addSql('DROP TABLE log_login');
307
        $this->addSql('DROP TABLE api_key');
308
        $this->addSql('DROP TABLE api_key_has_user_group');
309
        $this->addSql('DROP TABLE date_dimension');
310
        $this->addSql('DROP TABLE user');
311
        $this->addSql('DROP TABLE user_has_user_group');
312
        $this->addSql('DROP TABLE role');
313
        $this->addSql('DROP TABLE log_request');
314
        $this->addSql('DROP TABLE log_login_failure');
315
    }
316
}
317