102 lines
4.7 KiB
PHP
102 lines
4.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace DoctrineMigrations;
|
|
|
|
use Doctrine\DBAL\Schema\Schema;
|
|
use Doctrine\Migrations\AbstractMigration;
|
|
|
|
/**
|
|
* Auto-generated Migration: Please modify to your needs!
|
|
*/
|
|
final class Version20241201000000 extends AbstractMigration
|
|
{
|
|
public function getDescription(): string
|
|
{
|
|
return 'Create chat tables';
|
|
}
|
|
|
|
public function up(Schema $schema): void
|
|
{
|
|
// Create chat_channel table
|
|
$this->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');
|
|
}
|
|
}
|