addSql('CREATE TABLE chat_channel ( id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, description LONGTEXT DEFAULT NULL, channel_id VARCHAR(50) NOT NULL, is_public TINYINT(1) NOT NULL, is_active TINYINT(1) NOT NULL, created_by_id INT NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', avatar VARCHAR(255) DEFAULT NULL, message_count INT NOT NULL, last_message_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', UNIQUE INDEX UNIQ_CHANNEL_ID (channel_id), INDEX IDX_CHANNEL_CREATED_BY (created_by_id), PRIMARY KEY(id) ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); // Create chat_channel_member table $this->addSql('CREATE TABLE chat_channel_member ( id INT AUTO_INCREMENT NOT NULL, channel_id INT NOT NULL, user_id INT NOT NULL, is_admin TINYINT(1) NOT NULL, is_active TINYINT(1) NOT NULL, joined_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', last_seen_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', unread_count INT NOT NULL, INDEX IDX_MEMBER_CHANNEL (channel_id), INDEX IDX_MEMBER_USER (user_id), PRIMARY KEY(id) ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); // Create chat_message table $this->addSql('CREATE TABLE chat_message ( id INT AUTO_INCREMENT NOT NULL, channel_id INT NOT NULL, sender_id INT NOT NULL, content LONGTEXT NOT NULL, message_type VARCHAR(20) NOT NULL, sent_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', edited_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', is_edited TINYINT(1) NOT NULL, is_deleted TINYINT(1) NOT NULL, quoted_message_id INT DEFAULT NULL, attachments JSON DEFAULT NULL, reactions JSON DEFAULT NULL, reply_count INT NOT NULL, view_count INT NOT NULL, INDEX IDX_MESSAGE_CHANNEL (channel_id), INDEX IDX_MESSAGE_SENDER (sender_id), INDEX IDX_MESSAGE_QUOTED (quoted_message_id), PRIMARY KEY(id) ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); // Add foreign key constraints $this->addSql('ALTER TABLE chat_channel ADD CONSTRAINT FK_CHANNEL_CREATED_BY FOREIGN KEY (created_by_id) REFERENCES user (id)'); $this->addSql('ALTER TABLE chat_channel_member ADD CONSTRAINT FK_MEMBER_CHANNEL FOREIGN KEY (channel_id) REFERENCES chat_channel (id)'); $this->addSql('ALTER TABLE chat_channel_member ADD CONSTRAINT FK_MEMBER_USER FOREIGN KEY (user_id) REFERENCES user (id)'); $this->addSql('ALTER TABLE chat_message ADD CONSTRAINT FK_MESSAGE_CHANNEL FOREIGN KEY (channel_id) REFERENCES chat_channel (id)'); $this->addSql('ALTER TABLE chat_message ADD CONSTRAINT FK_MESSAGE_SENDER FOREIGN KEY (sender_id) REFERENCES user (id)'); $this->addSql('ALTER TABLE chat_message ADD CONSTRAINT FK_MESSAGE_QUOTED FOREIGN KEY (quoted_message_id) REFERENCES chat_message (id)'); } public function down(Schema $schema): void { // Drop foreign key constraints $this->addSql('ALTER TABLE chat_message DROP FOREIGN KEY FK_MESSAGE_QUOTED'); $this->addSql('ALTER TABLE chat_message DROP FOREIGN KEY FK_MESSAGE_SENDER'); $this->addSql('ALTER TABLE chat_message DROP FOREIGN KEY FK_MESSAGE_CHANNEL'); $this->addSql('ALTER TABLE chat_channel_member DROP FOREIGN KEY FK_MEMBER_USER'); $this->addSql('ALTER TABLE chat_channel_member DROP FOREIGN KEY FK_MEMBER_CHANNEL'); $this->addSql('ALTER TABLE chat_channel DROP FOREIGN KEY FK_CHANNEL_CREATED_BY'); // Drop tables $this->addSql('DROP TABLE chat_message'); $this->addSql('DROP TABLE chat_channel_member'); $this->addSql('DROP TABLE chat_channel'); } }