190 lines
11 KiB
SQL
190 lines
11 KiB
SQL
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
||
|
||
-- 使用 utf8mb4 连接字符集,保证中文注释、中文名称和 emoji 在导入时不被降级。
|
||
CREATE DATABASE IF NOT EXISTS hyapp_room
|
||
CHARACTER SET utf8mb4
|
||
COLLATE utf8mb4_unicode_ci;
|
||
|
||
USE hyapp_room;
|
||
|
||
CREATE TABLE IF NOT EXISTS rooms (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
|
||
room_short_id VARCHAR(32) NOT NULL DEFAULT '' COMMENT '房间短号 ID',
|
||
owner_user_id BIGINT NOT NULL COMMENT '房主用户 ID',
|
||
seat_count INT NOT NULL COMMENT '麦位数量',
|
||
mode VARCHAR(64) NOT NULL COMMENT '业务模式',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
room_password_hash VARCHAR(128) NOT NULL DEFAULT '' COMMENT '房间密码哈希值',
|
||
close_reason VARCHAR(512) NOT NULL DEFAULT '' COMMENT '关闭原因',
|
||
closed_by_admin_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '关闭操作管理员 ID',
|
||
closed_by_admin_name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '关闭操作管理员名称',
|
||
closed_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '关闭时间,UTC epoch ms',
|
||
visible_region_id BIGINT NOT NULL DEFAULT 0 COMMENT '可见区域 ID',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, room_id),
|
||
UNIQUE KEY uk_rooms_short_id (app_code, room_short_id),
|
||
UNIQUE KEY uk_rooms_owner_user (app_code, owner_user_id),
|
||
KEY idx_rooms_region_status (app_code, visible_region_id, status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间核心状态持久表';
|
||
|
||
CREATE TABLE IF NOT EXISTS room_list_entries (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
|
||
room_short_id VARCHAR(32) NOT NULL DEFAULT '' COMMENT '房间短号 ID',
|
||
visible_region_id BIGINT NOT NULL DEFAULT 0 COMMENT '可见区域 ID',
|
||
owner_user_id BIGINT NOT NULL COMMENT '房主用户 ID',
|
||
title VARCHAR(128) NOT NULL DEFAULT '' COMMENT '标题',
|
||
cover_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '封面 URL',
|
||
mode VARCHAR(64) NOT NULL COMMENT '业务模式',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
locked BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否锁定',
|
||
close_reason VARCHAR(512) NOT NULL DEFAULT '' COMMENT '关闭原因',
|
||
closed_by_admin_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '关闭操作管理员 ID',
|
||
closed_by_admin_name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '关闭操作管理员名称',
|
||
closed_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '关闭时间,UTC epoch ms',
|
||
heat BIGINT NOT NULL DEFAULT 0 COMMENT '热度值',
|
||
online_count INT NOT NULL DEFAULT 0 COMMENT '在线数量',
|
||
seat_count INT NOT NULL DEFAULT 0 COMMENT '麦位数量',
|
||
occupied_seat_count INT NOT NULL DEFAULT 0 COMMENT '占用麦位数量',
|
||
sort_score BIGINT NOT NULL DEFAULT 0 COMMENT '排序分值',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, room_id),
|
||
KEY idx_room_list_short_id (app_code, room_short_id),
|
||
KEY idx_room_list_region_hot (app_code, visible_region_id, status, sort_score DESC, room_id),
|
||
KEY idx_room_list_region_new (app_code, visible_region_id, status, created_at_ms DESC, room_id),
|
||
KEY idx_room_list_owner (app_code, owner_user_id, updated_at_ms)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间列表项表';
|
||
|
||
CREATE TABLE IF NOT EXISTS room_user_presence (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
user_id BIGINT NOT NULL COMMENT '用户 ID',
|
||
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
|
||
role VARCHAR(32) NOT NULL COMMENT '角色',
|
||
publish_state VARCHAR(32) NOT NULL DEFAULT '' COMMENT '推流状态',
|
||
mic_session_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '麦位会话 ID',
|
||
room_version BIGINT NOT NULL COMMENT 'Room Cell 状态版本',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
last_seen_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '最后活跃时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, user_id),
|
||
KEY idx_room_user_presence_room (app_code, room_id, status),
|
||
KEY idx_room_user_presence_updated (app_code, status, updated_at_ms)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间用户在线状态表';
|
||
|
||
CREATE TABLE IF NOT EXISTS room_snapshots (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
|
||
room_version BIGINT NOT NULL COMMENT 'Room Cell 状态版本',
|
||
payload LONGBLOB NOT NULL COMMENT '业务负载快照',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, room_id),
|
||
INDEX idx_room_snapshots_version (app_code, room_id, room_version)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Room Cell 快照恢复表';
|
||
|
||
CREATE TABLE IF NOT EXISTS room_command_log (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键 ID',
|
||
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
|
||
room_version BIGINT NOT NULL COMMENT 'Room Cell 状态版本',
|
||
command_id VARCHAR(128) NOT NULL COMMENT '业务命令幂等 ID',
|
||
command_type VARCHAR(64) NOT NULL COMMENT '命令类型',
|
||
owner_node_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '房主节点 ID',
|
||
lease_token VARCHAR(128) NOT NULL DEFAULT '' COMMENT '租约令牌',
|
||
payload LONGBLOB NOT NULL COMMENT '业务负载快照',
|
||
replayable BOOLEAN NOT NULL COMMENT '是否可重放',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
UNIQUE KEY uk_room_command (app_code, room_id, command_id),
|
||
KEY idx_room_command_replay (app_code, room_id, room_version)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Room Cell 命令日志表';
|
||
|
||
CREATE TABLE IF NOT EXISTS room_outbox (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
event_id VARCHAR(128) NOT NULL COMMENT '事件幂等 ID',
|
||
event_type VARCHAR(64) NOT NULL COMMENT '事件类型',
|
||
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
worker_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'worker ID',
|
||
lock_until_ms BIGINT NULL COMMENT '锁定过期时间,UTC epoch ms',
|
||
envelope LONGBLOB NOT NULL COMMENT '事件信封',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
retry_count INT NOT NULL DEFAULT 0 COMMENT '重试次数',
|
||
next_retry_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '下一次重试时间,UTC epoch ms',
|
||
last_error TEXT NULL COMMENT '最后一次失败原因',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, event_id),
|
||
KEY idx_room_outbox_pending (app_code, status, next_retry_at_ms, created_at_ms),
|
||
KEY idx_room_outbox_retry (app_code, status, next_retry_at_ms, created_at_ms),
|
||
KEY idx_room_outbox_claim (app_code, status, lock_until_ms, created_at_ms)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间事件 outbox 表';
|
||
|
||
CREATE TABLE IF NOT EXISTS room_user_feed_entries (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
user_id BIGINT NOT NULL COMMENT '用户 ID',
|
||
feed_type VARCHAR(32) NOT NULL COMMENT '动态类型',
|
||
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, user_id, feed_type, room_id),
|
||
KEY idx_room_user_feed_list (app_code, user_id, feed_type, updated_at_ms DESC, room_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间用户动态项表';
|
||
|
||
CREATE TABLE IF NOT EXISTS room_follows (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
user_id BIGINT NOT NULL COMMENT '用户 ID',
|
||
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
followed_at_ms BIGINT NOT NULL COMMENT '关注时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, user_id, room_id),
|
||
KEY idx_room_follows_user_list (app_code, user_id, status, followed_at_ms DESC, room_id),
|
||
KEY idx_room_follows_room (app_code, room_id, status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间关注表';
|
||
|
||
CREATE TABLE IF NOT EXISTS room_region_pins (
|
||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键 ID',
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
visible_region_id BIGINT NOT NULL COMMENT '可见区域 ID',
|
||
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
|
||
weight BIGINT NOT NULL DEFAULT 0 COMMENT '权重',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
pinned_at_ms BIGINT NOT NULL COMMENT '置顶时间,UTC epoch ms',
|
||
expires_at_ms BIGINT NOT NULL COMMENT '过期时间,UTC epoch ms',
|
||
cancelled_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '取消时间,UTC epoch ms',
|
||
created_by_admin_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建管理员 ID',
|
||
cancelled_by_admin_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '取消操作管理员 ID',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_room_region_pins_room (app_code, visible_region_id, room_id),
|
||
KEY idx_room_region_pins_active (app_code, visible_region_id, status, expires_at_ms, weight DESC, room_id),
|
||
KEY idx_room_region_pins_room (app_code, room_id, status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间区域置顶表';
|
||
|
||
CREATE TABLE IF NOT EXISTS room_seat_configs (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
allowed_seat_counts VARCHAR(128) NOT NULL COMMENT '允许麦位数量',
|
||
default_seat_count INT NOT NULL COMMENT '默认麦位数量',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间麦位配置表';
|
||
|
||
INSERT IGNORE INTO room_seat_configs (
|
||
app_code,
|
||
allowed_seat_counts,
|
||
default_seat_count,
|
||
created_at_ms,
|
||
updated_at_ms
|
||
) VALUES (
|
||
'lalu',
|
||
'[10,15,20,25,30]',
|
||
15,
|
||
0,
|
||
0
|
||
);
|