addSql(<<<'SQL' CREATE TABLE s3_multipart_uploads (id BIGINT AUTO_INCREMENT NOT NULL, upload_id VARCHAR(64) NOT NULL, object_key VARCHAR(255) NOT NULL, storage_path_prefix VARCHAR(2048) NOT NULL, content_type VARCHAR(255) NOT NULL, metadata JSON DEFAULT NULL, initiated_at DATETIME NOT NULL, expires_at DATETIME DEFAULT NULL, bucket_id INT NOT NULL, initiated_by_id INT NOT NULL, UNIQUE INDEX UNIQ_4FED1A58CCCFBA31 (upload_id), INDEX IDX_4FED1A5884CE584D (bucket_id), INDEX IDX_4FED1A58C4EF1FC7 (initiated_by_id), INDEX idx_upload_id (upload_id), INDEX idx_bucket_key (bucket_id, object_key), INDEX idx_expires (expires_at), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 SQL); $this->addSql(<<<'SQL' CREATE TABLE s3_objects (id BIGINT AUTO_INCREMENT NOT NULL, object_key VARCHAR(255) NOT NULL, size BIGINT NOT NULL, etag VARCHAR(64) NOT NULL, content_type VARCHAR(255) NOT NULL, storage_path VARCHAR(2048) NOT NULL, metadata JSON DEFAULT NULL, is_multipart TINYINT(1) NOT NULL, part_count INT NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, bucket_id INT NOT NULL, INDEX IDX_4A38581D84CE584D (bucket_id), INDEX idx_etag (etag), INDEX idx_size (size), INDEX idx_created (created_at), UNIQUE INDEX uk_bucket_object (bucket_id, object_key), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 SQL); $this->addSql(<<<'SQL' CREATE TABLE s3_presigned_urls (id BIGINT AUTO_INCREMENT NOT NULL, url_hash VARCHAR(64) NOT NULL, bucket_name VARCHAR(63) NOT NULL, object_key VARCHAR(255) NOT NULL, method VARCHAR(10) NOT NULL, expires_at DATETIME NOT NULL, access_key VARCHAR(32) NOT NULL, created_at DATETIME NOT NULL, UNIQUE INDEX UNIQ_301F0863CFECAB00 (url_hash), INDEX idx_url_hash (url_hash), INDEX idx_expires (expires_at), INDEX idx_bucket_key (bucket_name, object_key), INDEX idx_access_key (access_key), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 SQL); $this->addSql(<<<'SQL' ALTER TABLE s3_multipart_uploads ADD CONSTRAINT FK_4FED1A5884CE584D FOREIGN KEY (bucket_id) REFERENCES s3_buckets (id) SQL); $this->addSql(<<<'SQL' ALTER TABLE s3_multipart_uploads ADD CONSTRAINT FK_4FED1A58C4EF1FC7 FOREIGN KEY (initiated_by_id) REFERENCES s3_credentials (id) SQL); $this->addSql(<<<'SQL' ALTER TABLE s3_objects ADD CONSTRAINT FK_4A38581D84CE584D FOREIGN KEY (bucket_id) REFERENCES s3_buckets (id) SQL); $this->addSql(<<<'SQL' ALTER TABLE s3_buckets ADD CONSTRAINT FK_DC7E620E7E3C61F9 FOREIGN KEY (owner_id) REFERENCES s3_credentials (id) SQL); $this->addSql(<<<'SQL' ALTER TABLE s3_multipart_parts ADD CONSTRAINT FK_39F7DA05CCCFBA31 FOREIGN KEY (upload_id) REFERENCES s3_multipart_uploads (upload_id) SQL); } public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->addSql(<<<'SQL' ALTER TABLE s3_multipart_uploads DROP FOREIGN KEY FK_4FED1A5884CE584D SQL); $this->addSql(<<<'SQL' ALTER TABLE s3_multipart_uploads DROP FOREIGN KEY FK_4FED1A58C4EF1FC7 SQL); $this->addSql(<<<'SQL' ALTER TABLE s3_objects DROP FOREIGN KEY FK_4A38581D84CE584D SQL); $this->addSql(<<<'SQL' DROP TABLE s3_multipart_uploads SQL); $this->addSql(<<<'SQL' DROP TABLE s3_objects SQL); $this->addSql(<<<'SQL' DROP TABLE s3_presigned_urls SQL); $this->addSql(<<<'SQL' ALTER TABLE s3_buckets DROP FOREIGN KEY FK_DC7E620E7E3C61F9 SQL); $this->addSql(<<<'SQL' ALTER TABLE s3_multipart_parts DROP FOREIGN KEY FK_39F7DA05CCCFBA31 SQL); } }