Completed
Pull Request — master (#140)
by Serhii
12:05
created

Version20170321184028::postUp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Application\Migrations;
4
5
use Doctrine\DBAL\Migrations\AbstractMigration;
6
use Doctrine\DBAL\Schema\Schema;
7
8
/**
9
 * Auto-generated Migration: Please modify to your needs!
10
 */
11
class Version20170321184028 extends AbstractMigration
12
{
13
    protected $venues = [
14
        'venue-philharmonic' => 1,
15
        'venue-kilic-house' => 2,
16
        'venue-theatre' => 3,
17
        'venue-salut' => 4,
18
        'venue-palac_molodi' => 5,
19
        'venue-center_of_kids_arts' => 6,
20
        'venue-cherkasy-art-museum' => 7,
21
    ];
22
23
    /**
24
     * @param Schema $schema
25
     */
26 View Code Duplication
    public function up(Schema $schema)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
27
    {
28
        // this up() migration is auto-generated, please modify it to your needs
29
        $this->abortIf(
30
            $this->connection->getDatabasePlatform()->getName() !== 'mysql',
31
            'Migration can only be executed safely on "mysql".'
32
        );
33
34
        $this->addSql('CREATE TABLE venue (id INT AUTO_INCREMENT NOT NULL, title VARCHAR(255) NOT NULL, address VARCHAR(255) NOT NULL, hallTemplate LONGTEXT DEFAULT NULL, createdAt DATETIME NOT NULL, updatedAt DATETIME DEFAULT NULL, deletedAt DATETIME DEFAULT NULL, deletedBy VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
35
        $this->addSql('CREATE TABLE venue_sector (id INT AUTO_INCREMENT NOT NULL, venue_id INT DEFAULT NULL, title VARCHAR(255) NOT NULL, INDEX IDX_53CC259240A73EBA (venue_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
36
        $this->addSql('CREATE TABLE seat_translation (id INT AUTO_INCREMENT NOT NULL, object_id INT DEFAULT NULL, locale VARCHAR(8) NOT NULL, field VARCHAR(32) NOT NULL, content LONGTEXT DEFAULT NULL, INDEX IDX_9132FE65232D562B (object_id), UNIQUE INDEX lookup_unique_seat_translation_idx (locale, object_id, field), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
37
        $this->addSql('CREATE TABLE venue_sector_translation (id INT AUTO_INCREMENT NOT NULL, object_id INT DEFAULT NULL, locale VARCHAR(8) NOT NULL, field VARCHAR(32) NOT NULL, content LONGTEXT DEFAULT NULL, INDEX IDX_B4A75B1B232D562B (object_id), UNIQUE INDEX lookup_unique_venue_sector_translation_idx (locale, object_id, field), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
38
        $this->addSql('CREATE TABLE venue_translation (id INT AUTO_INCREMENT NOT NULL, object_id INT DEFAULT NULL, locale VARCHAR(8) NOT NULL, field VARCHAR(32) NOT NULL, content LONGTEXT DEFAULT NULL, INDEX IDX_A2B005A232D562B (object_id), UNIQUE INDEX lookup_unique_venue_translation_idx (locale, object_id, field), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
39
        $this->addSql('CREATE TABLE price_category_translation (id INT AUTO_INCREMENT NOT NULL, object_id INT DEFAULT NULL, locale VARCHAR(8) NOT NULL, field VARCHAR(32) NOT NULL, content LONGTEXT DEFAULT NULL, INDEX IDX_81449D73232D562B (object_id), UNIQUE INDEX lookup_unique_price_category_translation_idx (locale, object_id, field), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
40
        $this->addSql('CREATE TABLE seat (id INT AUTO_INCREMENT NOT NULL, row INT NOT NULL, place INT NOT NULL, venueSector_id INT DEFAULT NULL, priceCategory_id INT DEFAULT NULL, INDEX IDX_3D5C3666137F3880 (venueSector_id), INDEX IDX_3D5C36664319ED49 (priceCategory_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
41
        $this->addSql('CREATE TABLE price_category (id INT AUTO_INCREMENT NOT NULL, venue_id INT DEFAULT NULL, title VARCHAR(255) NOT NULL, color VARCHAR(255) NOT NULL, INDEX IDX_64FA22D640A73EBA (venue_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
42
        $this->addSql('ALTER TABLE venue_sector ADD CONSTRAINT FK_53CC259240A73EBA FOREIGN KEY (venue_id) REFERENCES venue (id)');
43
        $this->addSql('ALTER TABLE seat_translation ADD CONSTRAINT FK_9132FE65232D562B FOREIGN KEY (object_id) REFERENCES seat (id) ON DELETE CASCADE');
44
        $this->addSql('ALTER TABLE venue_sector_translation ADD CONSTRAINT FK_B4A75B1B232D562B FOREIGN KEY (object_id) REFERENCES venue_sector (id) ON DELETE CASCADE');
45
        $this->addSql('ALTER TABLE venue_translation ADD CONSTRAINT FK_A2B005A232D562B FOREIGN KEY (object_id) REFERENCES venue (id) ON DELETE CASCADE');
46
        $this->addSql('ALTER TABLE price_category_translation ADD CONSTRAINT FK_81449D73232D562B FOREIGN KEY (object_id) REFERENCES price_category (id) ON DELETE CASCADE');
47
        $this->addSql('ALTER TABLE seat ADD CONSTRAINT FK_3D5C3666137F3880 FOREIGN KEY (venueSector_id) REFERENCES venue_sector (id)');
48
        $this->addSql('ALTER TABLE seat ADD CONSTRAINT FK_3D5C36664319ED49 FOREIGN KEY (priceCategory_id) REFERENCES price_category (id)');
49
        $this->addSql('ALTER TABLE price_category ADD CONSTRAINT FK_64FA22D640A73EBA FOREIGN KEY (venue_id) REFERENCES venue (id)');
50
        $this->addSql('ALTER TABLE performance_schedule ADD venue_id INT DEFAULT NULL');
51
        $this->addSql('ALTER TABLE performance_schedule ADD CONSTRAINT FK_D12575F940A73EBA FOREIGN KEY (venue_id) REFERENCES venue (id)');
52
        $this->addSql('CREATE INDEX IDX_D12575F940A73EBA ON performance_schedule (venue_id)');
53
    }
54
55
    public function postUp(Schema $schema)
56
    {
57
        $this->addVenues();
58
        $this->setVenueIdForPerformanceShedule();
59
        $this->connection->executeQuery('ALTER TABLE performance_schedule DROP venue');
60
    }
61
62
    /**
63
     * @param Schema $schema
64
     */
65 View Code Duplication
    public function down(Schema $schema)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
66
    {
67
        // this down() migration is auto-generated, please modify it to your needs
68
        $this->abortIf(
69
            $this->connection->getDatabasePlatform()->getName() !== 'mysql',
70
            'Migration can only be executed safely on "mysql".'
71
        );
72
73
        $this->addSql('ALTER TABLE performance_schedule DROP FOREIGN KEY FK_D12575F940A73EBA');
74
        $this->addSql('ALTER TABLE venue_sector DROP FOREIGN KEY FK_53CC259240A73EBA');
75
        $this->addSql('ALTER TABLE venue_translation DROP FOREIGN KEY FK_A2B005A232D562B');
76
        $this->addSql('ALTER TABLE price_category DROP FOREIGN KEY FK_64FA22D640A73EBA');
77
        $this->addSql('ALTER TABLE venue_sector_translation DROP FOREIGN KEY FK_B4A75B1B232D562B');
78
        $this->addSql('ALTER TABLE seat DROP FOREIGN KEY FK_3D5C3666137F3880');
79
        $this->addSql('ALTER TABLE seat_translation DROP FOREIGN KEY FK_9132FE65232D562B');
80
        $this->addSql('ALTER TABLE price_category_translation DROP FOREIGN KEY FK_81449D73232D562B');
81
        $this->addSql('ALTER TABLE seat DROP FOREIGN KEY FK_3D5C36664319ED49');
82
        $this->addSql('DROP TABLE venue');
83
        $this->addSql('DROP TABLE venue_sector');
84
        $this->addSql('DROP TABLE seat_translation');
85
        $this->addSql('DROP TABLE venue_sector_translation');
86
        $this->addSql('DROP TABLE venue_translation');
87
        $this->addSql('DROP TABLE price_category_translation');
88
        $this->addSql('DROP TABLE seat');
89
        $this->addSql('DROP TABLE price_category');
90
        $this->addSql('DROP INDEX IDX_D12575F940A73EBA ON performance_schedule');
91
        $this->addSql('ALTER TABLE performance_schedule ADD venue VARCHAR(255) NOT NULL COLLATE utf8_unicode_ci, DROP venue_id');
92
    }
93
94
    private function addVenues()
95
    {
96
        $now = new \DateTime();
97
98
        $this->connection->insert(
99
            'venue',
100
            [
101
                'title' => 'Черкаська Філармонія',
102
                'address' => 'вулиця Хрещатик, 196, Черкаси, Черкаська область, Україна, 18000',
103
                'hallTemplate' => '<div></div>',
104
                'createdAt' => $now->format('Y-m-d H:i:s'),
105
            ]
106
        );
107
        $this->venues['venue-philharmonic'] = $this->connection->lastInsertId();
108
        $this->connection->insert(
109
            'venue',
110
            [
111
                'title' => 'Будинок культури ім. Кулика',
112
                'address' => 'вулиця Благовісна, 170, Черкаси, Черкаська область, Україна, 18000',
113
                'hallTemplate' => '<div></div>',
114
                'createdAt' => $now->format('Y-m-d H:i:s'),
115
            ]
116
        );
117
        $this->venues['venue-kilic-house'] = $this->connection->lastInsertId();
118
        $this->connection->insert(
119
            'venue',
120
            [
121
                'title' => 'Черкаський Театр',
122
                'address' => 'бульвар Шевченка, 234, Черкаси, Черкаська, Україна, 18000',
123
                'hallTemplate' => '<div></div>',
124
                'createdAt' => $now->format('Y-m-d H:i:s'),
125
            ]
126
        );
127
        $this->venues['venue-theatre'] = $this->connection->lastInsertId();
128
        $this->connection->insert(
129
            'venue',
130
            [
131
                'title' => 'Кінотеатр "Салют"',
132
                'address' => 'вулиця Хрещатик, 170, Черкаси, Черкаська область, Україна, 18000',
133
                'hallTemplate' => '<div></div>',
134
                'createdAt' => $now->format('Y-m-d H:i:s'),
135
            ]
136
        );
137
        $this->venues['venue-salut'] = $this->connection->lastInsertId();
138
        $this->connection->insert(
139
            'venue',
140
            [
141
                'title' => 'Черкаський міський Палац молоді',
142
                'address' => 'вулиця Сумгаїтська, 12, Черкаси, Черкаська область, Україна, 18000',
143
                'hallTemplate' => '<div></div>',
144
                'createdAt' => $now->format('Y-m-d H:i:s'),
145
            ]
146
        );
147
        $this->venues['venue-palac_molodi'] = $this->connection->lastInsertId();
148
        $this->connection->insert(
149
            'venue',
150
            [
151
                'title' => 'Центр дитячої та юнацької творчості',
152
                'address' => 'вулиця Смілянська, 33, Черкаси, Черкаська область, Україна, 18000',
153
                'hallTemplate' => '<div></div>',
154
                'createdAt' => $now->format('Y-m-d H:i:s'),
155
            ]
156
        );
157
        $this->venues['venue-center_of_kids_arts'] = $this->connection->lastInsertId();
158
        $this->connection->insert(
159
            'venue',
160
            [
161
                'title' => 'Черкаський обласний художній музей',
162
                'address' => 'вулиця Хрещатик, 259, Черкаси, Черкаська область, Україна, 18000',
163
                'hallTemplate' => '<div></div>',
164
                'createdAt' => $now->format('Y-m-d H:i:s'),
165
            ]
166
        );
167
        $this->venues['venue-cherkasy-art-museum'] = $this->connection->lastInsertId();
168
    }
169
170
    private function setVenueIdForPerformanceShedule():void
171
    {
172
        $query = "SELECT * FROM performance_schedule";
173
        $stmt = $this->connection->prepare($query);
174
        $stmt->execute();
175
176
        while ($row = $stmt->fetch()) {
177
            if (empty($row['venue'])) {
178
                continue;
179
            }
180
            $this->connection->update(
181
                'performance_schedule',
182
                ['venue_id' => $this->venues[$row['venue']]],
183
                ['id' => $row['id']]
184
            );
185
        }
186
    }
187
}
188