69 lines
3.0 KiB
SQL
69 lines
3.0 KiB
SQL
CREATE TABLE IF NOT EXISTS im_conversations (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
conversation_type TINYINT UNSIGNED NOT NULL DEFAULT 1,
|
|
last_seq BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
last_message_id BIGINT UNSIGNED NULL,
|
|
last_message_at DATETIME(3) NULL,
|
|
status TINYINT UNSIGNED NOT NULL DEFAULT 1,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id),
|
|
KEY idx_conversation_last (last_message_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS im_direct_conversations (
|
|
conversation_id BIGINT UNSIGNED NOT NULL,
|
|
user1_id BIGINT UNSIGNED NOT NULL,
|
|
user2_id BIGINT UNSIGNED NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (conversation_id),
|
|
UNIQUE KEY uk_direct_pair (user1_id, user2_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS im_conversation_members (
|
|
conversation_id BIGINT UNSIGNED NOT NULL,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
join_seq BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
read_seq BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
delivered_seq BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
clear_seq BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
pinned TINYINT(1) NOT NULL DEFAULT 0,
|
|
muted TINYINT(1) NOT NULL DEFAULT 0,
|
|
status TINYINT UNSIGNED NOT NULL DEFAULT 1,
|
|
joined_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (conversation_id, user_id),
|
|
KEY idx_member_user (user_id, updated_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS im_messages (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
conversation_id BIGINT UNSIGNED NOT NULL,
|
|
seq BIGINT UNSIGNED NOT NULL,
|
|
sender_id BIGINT UNSIGNED NOT NULL,
|
|
client_msg_id CHAR(26) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
|
|
message_type SMALLINT UNSIGNED NOT NULL,
|
|
body MEDIUMBLOB NOT NULL,
|
|
reply_to_message_id BIGINT UNSIGNED NULL,
|
|
moderation_status TINYINT UNSIGNED NOT NULL DEFAULT 1,
|
|
recalled_at DATETIME(3) NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_conv_seq (conversation_id, seq),
|
|
UNIQUE KEY uk_sender_client_msg (sender_id, client_msg_id),
|
|
KEY idx_conv_created (conversation_id, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS im_user_sync_events (
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
event_seq BIGINT UNSIGNED NOT NULL,
|
|
event_type SMALLINT UNSIGNED NOT NULL,
|
|
conversation_id BIGINT UNSIGNED NOT NULL,
|
|
message_seq BIGINT UNSIGNED NOT NULL,
|
|
event_data MEDIUMBLOB NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (user_id, event_seq),
|
|
KEY idx_sync_created (created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|