addSql(<<<'SQL' CREATE TABLE mail_configuration ( id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, protocol VARCHAR(10) NOT NULL, imap_host VARCHAR(255) DEFAULT NULL, imap_port INT NOT NULL, imap_encryption VARCHAR(10) NOT NULL, smtp_host VARCHAR(255) DEFAULT NULL, smtp_port INT NOT NULL, smtp_encryption VARCHAR(10) NOT NULL, username VARCHAR(255) DEFAULT NULL, encrypted_password TEXT DEFAULT NULL, sent_folder_path VARCHAR(255) NOT NULL, enabled BOOLEAN NOT NULL, PRIMARY KEY (id) ) SQL); $this->addSql(<<<'SQL' CREATE TABLE mail_folder ( id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, path VARCHAR(500) NOT NULL, display_name VARCHAR(255) NOT NULL, parent_path VARCHAR(500) DEFAULT NULL, unread_count INT NOT NULL, total_count INT NOT NULL, last_synced_at TIMESTAMP(0) WITH TIME ZONE DEFAULT NULL, PRIMARY KEY (id) ) SQL); $this->addSql('CREATE UNIQUE INDEX UNIQ_319BB6A6B548B0F ON mail_folder (path)'); $this->addSql('CREATE INDEX idx_mail_folder_parent_path ON mail_folder (parent_path)'); $this->addSql(<<<'SQL' CREATE TABLE mail_message ( id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, message_id VARCHAR(500) NOT NULL, folder_id INT NOT NULL, uid INT NOT NULL, subject VARCHAR(500) DEFAULT NULL, from_address VARCHAR(255) NOT NULL, from_name VARCHAR(255) DEFAULT NULL, to_addresses JSON NOT NULL, cc_addresses JSON DEFAULT NULL, sent_at TIMESTAMP(0) WITH TIME ZONE NOT NULL, is_read BOOLEAN NOT NULL, is_flagged BOOLEAN NOT NULL, has_attachments BOOLEAN NOT NULL, snippet TEXT DEFAULT NULL, synced_at TIMESTAMP(0) WITH TIME ZONE NOT NULL, PRIMARY KEY (id) ) SQL); $this->addSql('CREATE UNIQUE INDEX UNIQ_6C00B110537A1329 ON mail_message (message_id)'); $this->addSql('CREATE UNIQUE INDEX uq_mail_message_folder_uid ON mail_message (folder_id, uid)'); $this->addSql('CREATE INDEX IDX_6C00B110162CB942 ON mail_message (folder_id)'); $this->addSql('CREATE INDEX idx_mail_message_sent_at ON mail_message (sent_at)'); $this->addSql('CREATE INDEX idx_mail_message_is_read ON mail_message (is_read)'); $this->addSql('ALTER TABLE mail_message ADD CONSTRAINT FK_6C00B110162CB942 FOREIGN KEY (folder_id) REFERENCES mail_folder (id) ON DELETE CASCADE NOT DEFERRABLE'); $this->addSql(<<<'SQL' CREATE TABLE task_mail_link ( id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, task_id INT NOT NULL, mail_message_id INT NOT NULL, linked_at TIMESTAMP(0) WITH TIME ZONE NOT NULL, linked_by_id INT DEFAULT NULL, PRIMARY KEY (id) ) SQL); $this->addSql('CREATE UNIQUE INDEX uq_task_mail_link ON task_mail_link (task_id, mail_message_id)'); $this->addSql('CREATE INDEX IDX_E4FDC7C98DB60186 ON task_mail_link (task_id)'); $this->addSql('CREATE INDEX IDX_E4FDC7C987B9F9D5 ON task_mail_link (mail_message_id)'); $this->addSql('CREATE INDEX IDX_E4FDC7C91AE3CFF3 ON task_mail_link (linked_by_id)'); $this->addSql('ALTER TABLE task_mail_link ADD CONSTRAINT FK_E4FDC7C98DB60186 FOREIGN KEY (task_id) REFERENCES task (id) ON DELETE CASCADE NOT DEFERRABLE'); $this->addSql('ALTER TABLE task_mail_link ADD CONSTRAINT FK_E4FDC7C987B9F9D5 FOREIGN KEY (mail_message_id) REFERENCES mail_message (id) ON DELETE CASCADE NOT DEFERRABLE'); $this->addSql('ALTER TABLE task_mail_link ADD CONSTRAINT FK_E4FDC7C91AE3CFF3 FOREIGN KEY (linked_by_id) REFERENCES "user" (id) ON DELETE SET NULL NOT DEFERRABLE'); } public function down(Schema $schema): void { $this->addSql('ALTER TABLE task_mail_link DROP CONSTRAINT FK_E4FDC7C98DB60186'); $this->addSql('ALTER TABLE task_mail_link DROP CONSTRAINT FK_E4FDC7C987B9F9D5'); $this->addSql('ALTER TABLE task_mail_link DROP CONSTRAINT FK_E4FDC7C91AE3CFF3'); $this->addSql('DROP TABLE task_mail_link'); $this->addSql('ALTER TABLE mail_message DROP CONSTRAINT FK_6C00B110162CB942'); $this->addSql('DROP TABLE mail_message'); $this->addSql('DROP TABLE mail_folder'); $this->addSql('DROP TABLE mail_configuration'); } }