1
|
|
|
<?php declare(strict_types=1); |
2
|
|
|
|
3
|
|
|
namespace DoctrineMigrations; |
4
|
|
|
|
5
|
|
|
use Doctrine\DBAL\Schema\Schema; |
6
|
|
|
use Doctrine\Migrations\AbstractMigration; |
7
|
|
|
|
8
|
|
|
final class Version20180731072516 extends AbstractMigration |
9
|
|
|
{ |
10
|
|
|
public function up(Schema $schema) : void |
11
|
|
|
{ |
12
|
|
|
// this up() migration is auto-generated, please modify it to your needs |
13
|
|
|
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.'); |
14
|
|
|
|
15
|
|
|
$this->addSql('CREATE SEQUENCE movies_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
16
|
|
|
$this->addSql('CREATE SEQUENCE similar_movies_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
17
|
|
|
$this->addSql('CREATE SEQUENCE movies_recommendations_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
18
|
|
|
$this->addSql('CREATE SEQUENCE movies_translations_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
19
|
|
|
$this->addSql('CREATE SEQUENCE users_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
20
|
|
|
$this->addSql('CREATE SEQUENCE users_watched_movies_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
21
|
|
|
$this->addSql('CREATE SEQUENCE users_profiles_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
22
|
|
|
$this->addSql('CREATE SEQUENCE users_profiles_contacts_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
23
|
|
|
$this->addSql('CREATE SEQUENCE users_confirmation_tokens_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
24
|
|
|
$this->addSql('CREATE SEQUENCE users_api_tokens_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
25
|
|
|
$this->addSql('CREATE SEQUENCE genres_translations_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
26
|
|
|
$this->addSql('CREATE SEQUENCE genres_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
27
|
|
|
$this->addSql('CREATE SEQUENCE guests_watched_movies_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
28
|
|
|
$this->addSql('CREATE SEQUENCE guest_sessions_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); |
29
|
|
|
$this->addSql('CREATE TABLE movies (id INT NOT NULL, original_title VARCHAR(100) NOT NULL, original_poster_url VARCHAR(255) DEFAULT NULL, imdb_id VARCHAR(20) DEFAULT NULL, runtime INT DEFAULT 0, budget INT DEFAULT 0, release_date DATE DEFAULT NULL, tmdb_id INT NOT NULL, tmdb_vote_average NUMERIC(10, 0) DEFAULT NULL, tmdb_vote_count INT DEFAULT NULL, PRIMARY KEY(id))'); |
30
|
|
|
$this->addSql('CREATE UNIQUE INDEX UNIQ_C61EED3055BCC5E5 ON movies (tmdb_id)'); |
31
|
|
|
$this->addSql('CREATE TABLE movies_genres (movie_id INT NOT NULL, genre_id INT NOT NULL, PRIMARY KEY(movie_id, genre_id))'); |
32
|
|
|
$this->addSql('CREATE INDEX IDX_DF9737A28F93B6FC ON movies_genres (movie_id)'); |
33
|
|
|
$this->addSql('CREATE INDEX IDX_DF9737A24296D31F ON movies_genres (genre_id)'); |
34
|
|
|
$this->addSql('CREATE TABLE similar_movies (id INT NOT NULL, original_movie_id INT NOT NULL, similar_movie_id INT NOT NULL, PRIMARY KEY(id))'); |
35
|
|
|
$this->addSql('CREATE INDEX IDX_9F40C88DACCC51ED ON similar_movies (original_movie_id)'); |
36
|
|
|
$this->addSql('CREATE INDEX IDX_9F40C88D95FCEB10 ON similar_movies (similar_movie_id)'); |
37
|
|
|
$this->addSql('CREATE UNIQUE INDEX idx_SimilarMovie_original_movie_id_similar_movie_id ON similar_movies (original_movie_id, similar_movie_id)'); |
38
|
|
|
$this->addSql('CREATE TABLE movies_recommendations (id INT NOT NULL, original_movie_id INT NOT NULL, recommended_movie_id INT NOT NULL, user_id INT NOT NULL, PRIMARY KEY(id))'); |
39
|
|
|
$this->addSql('CREATE INDEX IDX_1FCF2901ACCC51ED ON movies_recommendations (original_movie_id)'); |
40
|
|
|
$this->addSql('CREATE INDEX IDX_1FCF29012431F8 ON movies_recommendations (recommended_movie_id)'); |
41
|
|
|
$this->addSql('CREATE INDEX IDX_1FCF2901A76ED395 ON movies_recommendations (user_id)'); |
42
|
|
|
$this->addSql('CREATE UNIQUE INDEX MovieRecommendation_original_movie_recommended_movie_user ON movies_recommendations (original_movie_id, recommended_movie_id, user_id)'); |
43
|
|
|
$this->addSql('CREATE TABLE movies_translations (id INT NOT NULL, movie_id INT NOT NULL, locale VARCHAR(5) NOT NULL, title VARCHAR(100) NOT NULL, poster_url VARCHAR(255) DEFAULT NULL, overview TEXT NOT NULL, PRIMARY KEY(id))'); |
44
|
|
|
$this->addSql('CREATE INDEX IDX_C48EC62C8F93B6FC ON movies_translations (movie_id)'); |
45
|
|
|
$this->addSql('CREATE UNIQUE INDEX idx_MovieTranslations_locale_movie_id ON movies_translations (locale, movie_id)'); |
46
|
|
|
$this->addSql('CREATE TABLE users (id INT NOT NULL, profile_id INT DEFAULT NULL, email VARCHAR(255) NOT NULL, is_email_confirmed INT DEFAULT 0 NOT NULL, username VARCHAR(255) NOT NULL, password VARCHAR(64) NOT NULL, roles VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id))'); |
47
|
|
|
$this->addSql('CREATE UNIQUE INDEX UNIQ_1483A5E9E7927C74 ON users (email)'); |
48
|
|
|
$this->addSql('CREATE UNIQUE INDEX UNIQ_1483A5E9F85E0677 ON users (username)'); |
49
|
|
|
$this->addSql('CREATE UNIQUE INDEX UNIQ_1483A5E9CCFA12B8 ON users (profile_id)'); |
50
|
|
|
$this->addSql('CREATE TABLE users_watched_movies (id INT NOT NULL, user_id INT NOT NULL, movie_id INT NOT NULL, vote NUMERIC(10, 0) DEFAULT NULL, added_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, watched_at DATE DEFAULT NULL, PRIMARY KEY(id))'); |
51
|
|
|
$this->addSql('CREATE INDEX IDX_3F9A4B7DA76ED395 ON users_watched_movies (user_id)'); |
52
|
|
|
$this->addSql('CREATE INDEX IDX_3F9A4B7D8F93B6FC ON users_watched_movies (movie_id)'); |
53
|
|
|
$this->addSql('CREATE UNIQUE INDEX idx_UserWatchedMovie_user_id_movie_id ON users_watched_movies (user_id, movie_id)'); |
54
|
|
|
$this->addSql('CREATE TABLE users_profiles (id INT NOT NULL, first_name VARCHAR(255) DEFAULT NULL, last_name VARCHAR(255) DEFAULT NULL, birth_date DATE DEFAULT NULL, about VARCHAR(255) DEFAULT NULL, public_email VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id))'); |
55
|
|
|
$this->addSql('CREATE TABLE users_profiles_contacts (id INT NOT NULL, profile_id INT NOT NULL, provider VARCHAR(30) NOT NULL, url VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); |
56
|
|
|
$this->addSql('CREATE INDEX IDX_52D26C5ECCFA12B8 ON users_profiles_contacts (profile_id)'); |
57
|
|
|
$this->addSql('CREATE TABLE users_confirmation_tokens (id INT NOT NULL, user_id INT DEFAULT NULL, token VARCHAR(32) NOT NULL, type VARCHAR(256) NOT NULL, expires_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, PRIMARY KEY(id))'); |
58
|
|
|
$this->addSql('CREATE UNIQUE INDEX UNIQ_173B44C45F37A13B ON users_confirmation_tokens (token)'); |
59
|
|
|
$this->addSql('CREATE INDEX IDX_173B44C4A76ED395 ON users_confirmation_tokens (user_id)'); |
60
|
|
|
$this->addSql('CREATE TABLE users_api_tokens (id INT NOT NULL, user_id INT DEFAULT NULL, token VARCHAR(256) NOT NULL, PRIMARY KEY(id))'); |
61
|
|
|
$this->addSql('CREATE UNIQUE INDEX UNIQ_FBC6F99A5F37A13B ON users_api_tokens (token)'); |
62
|
|
|
$this->addSql('CREATE INDEX IDX_FBC6F99AA76ED395 ON users_api_tokens (user_id)'); |
63
|
|
|
$this->addSql('CREATE TABLE genres_translations (id INT NOT NULL, genre_id INT NOT NULL, locale VARCHAR(5) NOT NULL, name VARCHAR(50) NOT NULL, PRIMARY KEY(id))'); |
64
|
|
|
$this->addSql('CREATE INDEX IDX_E6A3DB174296D31F ON genres_translations (genre_id)'); |
65
|
|
|
$this->addSql('CREATE UNIQUE INDEX idx_GenreTranslations_locale_genre_id ON genres_translations (locale, genre_id)'); |
66
|
|
|
$this->addSql('CREATE TABLE genres (id INT NOT NULL, tmdb_id INT DEFAULT NULL, PRIMARY KEY(id))'); |
67
|
|
|
$this->addSql('CREATE TABLE guests_watched_movies (id INT NOT NULL, guest_session_id INT NOT NULL, movie_id INT NOT NULL, vote NUMERIC(10, 0) DEFAULT NULL, added_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, watched_at DATE DEFAULT NULL, PRIMARY KEY(id))'); |
68
|
|
|
$this->addSql('CREATE INDEX IDX_72F09C865C27BC4E ON guests_watched_movies (guest_session_id)'); |
69
|
|
|
$this->addSql('CREATE INDEX IDX_72F09C868F93B6FC ON guests_watched_movies (movie_id)'); |
70
|
|
|
$this->addSql('CREATE UNIQUE INDEX idx_GuestWatchedMovie_guest_session_id_movie_id ON guests_watched_movies (guest_session_id, movie_id)'); |
71
|
|
|
$this->addSql('CREATE TABLE guest_sessions (id INT NOT NULL, token VARCHAR(256) NOT NULL, expires_at DATE NOT NULL, PRIMARY KEY(id))'); |
72
|
|
|
$this->addSql('CREATE UNIQUE INDEX UNIQ_E54A556C5F37A13B ON guest_sessions (token)'); |
73
|
|
|
$this->addSql('ALTER TABLE movies_genres ADD CONSTRAINT FK_DF9737A28F93B6FC FOREIGN KEY (movie_id) REFERENCES movies (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
74
|
|
|
$this->addSql('ALTER TABLE movies_genres ADD CONSTRAINT FK_DF9737A24296D31F FOREIGN KEY (genre_id) REFERENCES genres (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
75
|
|
|
$this->addSql('ALTER TABLE similar_movies ADD CONSTRAINT FK_9F40C88DACCC51ED FOREIGN KEY (original_movie_id) REFERENCES movies (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
76
|
|
|
$this->addSql('ALTER TABLE similar_movies ADD CONSTRAINT FK_9F40C88D95FCEB10 FOREIGN KEY (similar_movie_id) REFERENCES movies (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
77
|
|
|
$this->addSql('ALTER TABLE movies_recommendations ADD CONSTRAINT FK_1FCF2901ACCC51ED FOREIGN KEY (original_movie_id) REFERENCES movies (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
78
|
|
|
$this->addSql('ALTER TABLE movies_recommendations ADD CONSTRAINT FK_1FCF29012431F8 FOREIGN KEY (recommended_movie_id) REFERENCES movies (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
79
|
|
|
$this->addSql('ALTER TABLE movies_recommendations ADD CONSTRAINT FK_1FCF2901A76ED395 FOREIGN KEY (user_id) REFERENCES users (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
80
|
|
|
$this->addSql('ALTER TABLE movies_translations ADD CONSTRAINT FK_C48EC62C8F93B6FC FOREIGN KEY (movie_id) REFERENCES movies (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
81
|
|
|
$this->addSql('ALTER TABLE users ADD CONSTRAINT FK_1483A5E9CCFA12B8 FOREIGN KEY (profile_id) REFERENCES users_profiles (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
82
|
|
|
$this->addSql('ALTER TABLE users_watched_movies ADD CONSTRAINT FK_3F9A4B7DA76ED395 FOREIGN KEY (user_id) REFERENCES users (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
83
|
|
|
$this->addSql('ALTER TABLE users_watched_movies ADD CONSTRAINT FK_3F9A4B7D8F93B6FC FOREIGN KEY (movie_id) REFERENCES movies (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
84
|
|
|
$this->addSql('ALTER TABLE users_profiles_contacts ADD CONSTRAINT FK_52D26C5ECCFA12B8 FOREIGN KEY (profile_id) REFERENCES users_profiles (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
85
|
|
|
$this->addSql('ALTER TABLE users_confirmation_tokens ADD CONSTRAINT FK_173B44C4A76ED395 FOREIGN KEY (user_id) REFERENCES users (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
86
|
|
|
$this->addSql('ALTER TABLE users_api_tokens ADD CONSTRAINT FK_FBC6F99AA76ED395 FOREIGN KEY (user_id) REFERENCES users (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
87
|
|
|
$this->addSql('ALTER TABLE genres_translations ADD CONSTRAINT FK_E6A3DB174296D31F FOREIGN KEY (genre_id) REFERENCES genres (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
88
|
|
|
$this->addSql('ALTER TABLE guests_watched_movies ADD CONSTRAINT FK_72F09C865C27BC4E FOREIGN KEY (guest_session_id) REFERENCES guest_sessions (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
89
|
|
|
$this->addSql('ALTER TABLE guests_watched_movies ADD CONSTRAINT FK_72F09C868F93B6FC FOREIGN KEY (movie_id) REFERENCES movies (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); |
90
|
|
|
} |
91
|
|
|
|
92
|
|
|
public function down(Schema $schema) : void |
93
|
|
|
{ |
94
|
|
|
// this down() migration is auto-generated, please modify it to your needs |
95
|
|
|
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.'); |
96
|
|
|
|
97
|
|
|
$this->addSql('CREATE SCHEMA public'); |
98
|
|
|
$this->addSql('ALTER TABLE movies_genres DROP CONSTRAINT FK_DF9737A28F93B6FC'); |
99
|
|
|
$this->addSql('ALTER TABLE similar_movies DROP CONSTRAINT FK_9F40C88DACCC51ED'); |
100
|
|
|
$this->addSql('ALTER TABLE similar_movies DROP CONSTRAINT FK_9F40C88D95FCEB10'); |
101
|
|
|
$this->addSql('ALTER TABLE movies_recommendations DROP CONSTRAINT FK_1FCF2901ACCC51ED'); |
102
|
|
|
$this->addSql('ALTER TABLE movies_recommendations DROP CONSTRAINT FK_1FCF29012431F8'); |
103
|
|
|
$this->addSql('ALTER TABLE movies_translations DROP CONSTRAINT FK_C48EC62C8F93B6FC'); |
104
|
|
|
$this->addSql('ALTER TABLE users_watched_movies DROP CONSTRAINT FK_3F9A4B7D8F93B6FC'); |
105
|
|
|
$this->addSql('ALTER TABLE guests_watched_movies DROP CONSTRAINT FK_72F09C868F93B6FC'); |
106
|
|
|
$this->addSql('ALTER TABLE movies_recommendations DROP CONSTRAINT FK_1FCF2901A76ED395'); |
107
|
|
|
$this->addSql('ALTER TABLE users_watched_movies DROP CONSTRAINT FK_3F9A4B7DA76ED395'); |
108
|
|
|
$this->addSql('ALTER TABLE users_confirmation_tokens DROP CONSTRAINT FK_173B44C4A76ED395'); |
109
|
|
|
$this->addSql('ALTER TABLE users_api_tokens DROP CONSTRAINT FK_FBC6F99AA76ED395'); |
110
|
|
|
$this->addSql('ALTER TABLE users DROP CONSTRAINT FK_1483A5E9CCFA12B8'); |
111
|
|
|
$this->addSql('ALTER TABLE users_profiles_contacts DROP CONSTRAINT FK_52D26C5ECCFA12B8'); |
112
|
|
|
$this->addSql('ALTER TABLE movies_genres DROP CONSTRAINT FK_DF9737A24296D31F'); |
113
|
|
|
$this->addSql('ALTER TABLE genres_translations DROP CONSTRAINT FK_E6A3DB174296D31F'); |
114
|
|
|
$this->addSql('ALTER TABLE guests_watched_movies DROP CONSTRAINT FK_72F09C865C27BC4E'); |
115
|
|
|
$this->addSql('DROP SEQUENCE movies_id_seq CASCADE'); |
116
|
|
|
$this->addSql('DROP SEQUENCE similar_movies_id_seq CASCADE'); |
117
|
|
|
$this->addSql('DROP SEQUENCE movies_recommendations_id_seq CASCADE'); |
118
|
|
|
$this->addSql('DROP SEQUENCE movies_translations_id_seq CASCADE'); |
119
|
|
|
$this->addSql('DROP SEQUENCE users_id_seq CASCADE'); |
120
|
|
|
$this->addSql('DROP SEQUENCE users_watched_movies_id_seq CASCADE'); |
121
|
|
|
$this->addSql('DROP SEQUENCE users_profiles_id_seq CASCADE'); |
122
|
|
|
$this->addSql('DROP SEQUENCE users_profiles_contacts_id_seq CASCADE'); |
123
|
|
|
$this->addSql('DROP SEQUENCE users_confirmation_tokens_id_seq CASCADE'); |
124
|
|
|
$this->addSql('DROP SEQUENCE users_api_tokens_id_seq CASCADE'); |
125
|
|
|
$this->addSql('DROP SEQUENCE genres_translations_id_seq CASCADE'); |
126
|
|
|
$this->addSql('DROP SEQUENCE genres_id_seq CASCADE'); |
127
|
|
|
$this->addSql('DROP SEQUENCE guests_watched_movies_id_seq CASCADE'); |
128
|
|
|
$this->addSql('DROP SEQUENCE guest_sessions_id_seq CASCADE'); |
129
|
|
|
$this->addSql('DROP TABLE movies'); |
130
|
|
|
$this->addSql('DROP TABLE movies_genres'); |
131
|
|
|
$this->addSql('DROP TABLE similar_movies'); |
132
|
|
|
$this->addSql('DROP TABLE movies_recommendations'); |
133
|
|
|
$this->addSql('DROP TABLE movies_translations'); |
134
|
|
|
$this->addSql('DROP TABLE users'); |
135
|
|
|
$this->addSql('DROP TABLE users_watched_movies'); |
136
|
|
|
$this->addSql('DROP TABLE users_profiles'); |
137
|
|
|
$this->addSql('DROP TABLE users_profiles_contacts'); |
138
|
|
|
$this->addSql('DROP TABLE users_confirmation_tokens'); |
139
|
|
|
$this->addSql('DROP TABLE users_api_tokens'); |
140
|
|
|
$this->addSql('DROP TABLE genres_translations'); |
141
|
|
|
$this->addSql('DROP TABLE genres'); |
142
|
|
|
$this->addSql('DROP TABLE guests_watched_movies'); |
143
|
|
|
$this->addSql('DROP TABLE guest_sessions'); |
144
|
|
|
} |
145
|
|
|
} |
146
|
|
|
|