-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathVersion20211001194001.php
335 lines (314 loc) · 16.1 KB
/
Version20211001194001.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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
<?php
declare(strict_types=1);
// phpcs:ignoreFile
namespace DoctrineMigrations;
use Doctrine\DBAL\Platforms\AbstractMySQLPlatform;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use Override;
/**
* Initial database structure
*/
final class Version20211001194001 extends AbstractMigration
{
/**
* @noinspection PhpMissingParentCallCommonInspection
*/
#[Override]
public function getDescription(): string
{
return 'Initial database structure';
}
/**
* @noinspection PhpMissingParentCallCommonInspection
*/
#[Override]
public function isTransactional(): bool
{
return false;
}
/**
* {@inheritdoc}
*/
#[Override]
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->abortIf(
!$this->connection->getDatabasePlatform() instanceof AbstractMySQLPlatform,
'Migration can only be executed safely on \'mysql\'.'
);
$sqlScheduledCommand = <<<SQL
CREATE TABLE scheduled_command (
id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(150) NOT NULL,
command VARCHAR(200) NOT NULL,
arguments LONGTEXT DEFAULT NULL,
cron_expression VARCHAR(200) DEFAULT NULL,
last_execution DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime)',
last_return_code INT DEFAULT NULL,
log_file VARCHAR(150) DEFAULT NULL,
priority INT NOT NULL,
execute_immediately TINYINT(1) NOT NULL,
disabled TINYINT(1) NOT NULL,
locked TINYINT(1) NOT NULL,
version INT DEFAULT 1 NOT NULL,
created_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime)',
UNIQUE INDEX UNIQ_EA0DBC905E237E06 (name),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlScheduledCommand);
$sqlApiKey = <<<SQL
CREATE TABLE api_key (
id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
token VARCHAR(40) NOT NULL COMMENT 'Generated API key string for authentication',
description LONGTEXT NOT NULL,
created_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
updated_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
created_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)',
updated_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)',
INDEX IDX_C912ED9DB03A8386 (created_by_id),
INDEX IDX_C912ED9D896DBBDE (updated_by_id),
UNIQUE INDEX uq_token (token),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlApiKey);
$sqlApiKeyHasUserGroup = <<<SQL
CREATE TABLE api_key_has_user_group (
api_key_id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
user_group_id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
INDEX IDX_E2D0E7F98BE312B3 (api_key_id),
INDEX IDX_E2D0E7F91ED93D47 (user_group_id),
PRIMARY KEY(api_key_id, user_group_id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlApiKeyHasUserGroup);
$sqlDateDimension = <<<SQL
CREATE TABLE date_dimension (
id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
year INT NOT NULL COMMENT 'A full numeric representation of a year, 4 digits',
month INT NOT NULL COMMENT 'Day of the month without leading zeros; 1 to 12',
day INT NOT NULL COMMENT 'Day of the month without leading zeros; 1 to 31',
quarter INT NOT NULL COMMENT 'Calendar quarter; 1, 2, 3 or 4',
week_number INT NOT NULL COMMENT 'ISO-8601 week number of year, weeks starting on Monday',
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)',
day_number_of_year INT NOT NULL COMMENT 'The day of the year (starting from 0); 0 through 365',
leap_year TINYINT(1) NOT NULL COMMENT 'Whether it''s a leap year or not',
week_numbering_year INT NOT NULL COMMENT 'ISO-8601 week-numbering year.',
unix_time BIGINT NOT NULL COMMENT 'Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)',
date DATE NOT NULL COMMENT '(DC2Type:date_immutable)',
INDEX date (date),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlDateDimension);
$sqlHealth = <<<SQL
CREATE TABLE health (
id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
timestamp DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlHealth);
$sqlLogLogin = <<<SQL
CREATE TABLE log_login (
id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
user_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
client_type VARCHAR(255) DEFAULT NULL,
client_name VARCHAR(255) DEFAULT NULL,
client_short_name VARCHAR(255) DEFAULT NULL,
client_version VARCHAR(255) DEFAULT NULL,
client_engine VARCHAR(255) DEFAULT NULL,
os_name VARCHAR(255) DEFAULT NULL,
os_short_name VARCHAR(255) DEFAULT NULL,
os_version VARCHAR(255) DEFAULT NULL,
os_platform VARCHAR(255) DEFAULT NULL,
device_name VARCHAR(255) DEFAULT NULL,
brand_name VARCHAR(255) DEFAULT NULL,
model VARCHAR(255) DEFAULT NULL,
type ENUM('failure', 'success') NOT NULL COMMENT '(DC2Type:EnumLogLogin)',
username VARCHAR(255) NOT NULL,
time DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
`date` DATE NOT NULL COMMENT '(DC2Type:date_immutable)',
agent LONGTEXT NOT NULL,
http_host VARCHAR(255) NOT NULL,
client_ip VARCHAR(255) NOT NULL,
INDEX user_id (user_id),
INDEX date (date),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlLogLogin);
$sqlLogLoginFailure = <<<SQL
CREATE TABLE log_login_failure (
id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
user_id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
timestamp DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
INDEX user_id (user_id),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlLogLoginFailure);
$sqlLogRequest = <<<SQL
CREATE TABLE log_request (
id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
user_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
api_key_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
status_code INT NOT NULL,
response_content_length INT NOT NULL,
is_main_request TINYINT(1) NOT NULL,
time DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
`date` DATE NOT NULL COMMENT '(DC2Type:date_immutable)',
agent LONGTEXT NOT NULL,
http_host VARCHAR(255) NOT NULL,
client_ip VARCHAR(255) NOT NULL,
headers LONGTEXT NOT NULL COMMENT '(DC2Type:json)',
method VARCHAR(255) NOT NULL,
scheme VARCHAR(5) NOT NULL,
base_path VARCHAR(255) NOT NULL,
script VARCHAR(255) NOT NULL,
path VARCHAR(255) DEFAULT NULL,
query_string LONGTEXT DEFAULT NULL,
uri LONGTEXT NOT NULL,
controller VARCHAR(255) DEFAULT NULL,
content_type VARCHAR(255) DEFAULT NULL,
content_type_short VARCHAR(255) DEFAULT NULL,
is_xml_http_request TINYINT(1) NOT NULL,
action VARCHAR(255) DEFAULT NULL,
content LONGTEXT DEFAULT NULL,
parameters LONGTEXT NOT NULL COMMENT '(DC2Type:json)',
INDEX user_id (user_id),
INDEX api_key_id (api_key_id),
INDEX request_date (date),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlLogRequest);
$sqlRole = <<<SQL
CREATE TABLE role (
role VARCHAR(255) NOT NULL,
description LONGTEXT NOT NULL,
created_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
updated_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
created_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)',
updated_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)',
INDEX IDX_57698A6AB03A8386 (created_by_id),
INDEX IDX_57698A6A896DBBDE (updated_by_id),
UNIQUE INDEX uq_role (role),
PRIMARY KEY(role)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlRole);
$sqlUser = <<<SQL
CREATE TABLE user (
id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
username VARCHAR(255) NOT NULL,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
language ENUM('en', 'ru', 'ua', 'fi') NOT NULL COMMENT 'User language for translations(DC2Type:EnumLanguage)',
locale ENUM('en', 'ru', 'ua', 'fi') NOT NULL COMMENT 'User locale for number, time, date, etc. formatting.(DC2Type:EnumLocale)',
timezone VARCHAR(255) DEFAULT 'Europe/Kyiv' NOT NULL COMMENT 'User timezone which should be used to display time, date, etc.',
password VARCHAR(255) NOT NULL COMMENT 'Hashed password',
created_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
updated_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
created_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)',
updated_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)',
INDEX IDX_8D93D649B03A8386 (created_by_id),
INDEX IDX_8D93D649896DBBDE (updated_by_id),
UNIQUE INDEX uq_username (username),
UNIQUE INDEX uq_email (email),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlUser);
$sqlUserHasUserGroup = <<<SQL
CREATE TABLE user_has_user_group (
user_id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
user_group_id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
INDEX IDX_2C59957A76ED395 (user_id),
INDEX IDX_2C599571ED93D47 (user_group_id),
PRIMARY KEY(user_id, user_group_id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlUserHasUserGroup);
$sqlUserGroup = <<<SQL
CREATE TABLE user_group (
id BINARY(16) NOT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
role VARCHAR(255) DEFAULT NULL,
name VARCHAR(255) NOT NULL,
created_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
updated_by_id BINARY(16) DEFAULT NULL COMMENT '(DC2Type:uuid_binary_ordered_time)',
created_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)',
updated_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)',
INDEX IDX_8F02BF9D57698A6A (role),
INDEX IDX_8F02BF9DB03A8386 (created_by_id),
INDEX IDX_8F02BF9D896DBBDE (updated_by_id),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
SQL;
$this->addSql($sqlUserGroup);
$this->addSql('ALTER TABLE api_key ADD CONSTRAINT FK_C912ED9DB03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL');
$this->addSql('ALTER TABLE api_key ADD CONSTRAINT FK_C912ED9D896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL');
$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');
$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');
$this->addSql('ALTER TABLE log_login ADD CONSTRAINT FK_8A76204DA76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE SET NULL');
$this->addSql('ALTER TABLE log_login_failure ADD CONSTRAINT FK_EDB4AF3A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE');
$this->addSql('ALTER TABLE log_request ADD CONSTRAINT FK_35AB708A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE SET NULL');
$this->addSql('ALTER TABLE log_request ADD CONSTRAINT FK_35AB7088BE312B3 FOREIGN KEY (api_key_id) REFERENCES api_key (id) ON DELETE SET NULL');
$this->addSql('ALTER TABLE role ADD CONSTRAINT FK_57698A6AB03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL');
$this->addSql('ALTER TABLE role ADD CONSTRAINT FK_57698A6A896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL');
$this->addSql('ALTER TABLE user ADD CONSTRAINT FK_8D93D649B03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL');
$this->addSql('ALTER TABLE user ADD CONSTRAINT FK_8D93D649896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL');
$this->addSql('ALTER TABLE user_has_user_group ADD CONSTRAINT FK_2C59957A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE');
$this->addSql('ALTER TABLE user_has_user_group ADD CONSTRAINT FK_2C599571ED93D47 FOREIGN KEY (user_group_id) REFERENCES user_group (id) ON DELETE CASCADE');
$this->addSql('ALTER TABLE user_group ADD CONSTRAINT FK_8F02BF9D57698A6A FOREIGN KEY (role) REFERENCES role (role) ON DELETE CASCADE');
$this->addSql('ALTER TABLE user_group ADD CONSTRAINT FK_8F02BF9DB03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL');
$this->addSql('ALTER TABLE user_group ADD CONSTRAINT FK_8F02BF9D896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL');
}
/**
* @noinspection PhpMissingParentCallCommonInspection
*
* {@inheritdoc}
*/
#[Override]
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->abortIf(
!$this->connection->getDatabasePlatform() instanceof AbstractMySQLPlatform,
'Migration can only be executed safely on \'mysql\'.'
);
$this->addSql('ALTER TABLE api_key_has_user_group DROP FOREIGN KEY FK_E2D0E7F98BE312B3');
$this->addSql('ALTER TABLE log_request DROP FOREIGN KEY FK_35AB7088BE312B3');
$this->addSql('ALTER TABLE user_group DROP FOREIGN KEY FK_8F02BF9D57698A6A');
$this->addSql('ALTER TABLE api_key DROP FOREIGN KEY FK_C912ED9DB03A8386');
$this->addSql('ALTER TABLE api_key DROP FOREIGN KEY FK_C912ED9D896DBBDE');
$this->addSql('ALTER TABLE log_login DROP FOREIGN KEY FK_8A76204DA76ED395');
$this->addSql('ALTER TABLE log_login_failure DROP FOREIGN KEY FK_EDB4AF3A76ED395');
$this->addSql('ALTER TABLE log_request DROP FOREIGN KEY FK_35AB708A76ED395');
$this->addSql('ALTER TABLE role DROP FOREIGN KEY FK_57698A6AB03A8386');
$this->addSql('ALTER TABLE role DROP FOREIGN KEY FK_57698A6A896DBBDE');
$this->addSql('ALTER TABLE user DROP FOREIGN KEY FK_8D93D649B03A8386');
$this->addSql('ALTER TABLE user DROP FOREIGN KEY FK_8D93D649896DBBDE');
$this->addSql('ALTER TABLE user_has_user_group DROP FOREIGN KEY FK_2C59957A76ED395');
$this->addSql('ALTER TABLE user_group DROP FOREIGN KEY FK_8F02BF9DB03A8386');
$this->addSql('ALTER TABLE user_group DROP FOREIGN KEY FK_8F02BF9D896DBBDE');
$this->addSql('ALTER TABLE api_key_has_user_group DROP FOREIGN KEY FK_E2D0E7F91ED93D47');
$this->addSql('ALTER TABLE user_has_user_group DROP FOREIGN KEY FK_2C599571ED93D47');
$this->addSql('DROP TABLE scheduled_command');
$this->addSql('DROP TABLE api_key');
$this->addSql('DROP TABLE api_key_has_user_group');
$this->addSql('DROP TABLE date_dimension');
$this->addSql('DROP TABLE health');
$this->addSql('DROP TABLE log_login');
$this->addSql('DROP TABLE log_login_failure');
$this->addSql('DROP TABLE log_request');
$this->addSql('DROP TABLE role');
$this->addSql('DROP TABLE user');
$this->addSql('DROP TABLE user_has_user_group');
$this->addSql('DROP TABLE user_group');
}
}