Files
kefu/im/backend/migrations/004_im.sql
T
2026-08-27 14:04:28 +08:00

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;