262 lines
15 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 '业务状态',
joined_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '进房时间UTC epoch ms',
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_user_gift_stats (
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
user_id BIGINT NOT NULL COMMENT '送礼用户 ID',
gift_value BIGINT NOT NULL DEFAULT 0 COMMENT '当前房间生命周期内累计送礼价值',
last_gift_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '最近一次送礼时间UTC epoch ms',
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, user_id),
KEY idx_room_user_gift_stats_room_value (app_code, room_id, gift_value DESC, last_gift_at_ms DESC, user_id)
) 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='房间麦位配置表';
CREATE TABLE IF NOT EXISTS room_treasure_configs (
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
enabled TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否启用房间宝箱',
config_version BIGINT NOT NULL DEFAULT 1 COMMENT '配置版本,后台每次保存递增',
energy_source VARCHAR(32) NOT NULL COMMENT '能量来源,默认按送礼价值累计',
open_delay_ms BIGINT NOT NULL COMMENT '能量满后开箱倒计时UTC 毫秒时长',
broadcast_enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '倒计时开始后是否广播',
broadcast_scope VARCHAR(32) NOT NULL COMMENT '广播范围none/region/global',
broadcast_delay_ms BIGINT NOT NULL DEFAULT 0 COMMENT '广播后到开箱的延迟UTC 毫秒时长',
reward_stack_policy VARCHAR(32) NOT NULL COMMENT '同一用户多角色命中奖励时的叠加策略',
levels_json JSON NOT NULL COMMENT '7 级宝箱物料、阈值和奖励池配置',
gift_energy_rules_json JSON NOT NULL COMMENT '礼物能量倍率、固定能量和排除规则',
updated_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 (app_code),
KEY idx_room_treasure_enabled (app_code, enabled)
) 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
);
INSERT IGNORE INTO room_treasure_configs (
app_code,
enabled,
config_version,
energy_source,
open_delay_ms,
broadcast_enabled,
broadcast_scope,
broadcast_delay_ms,
reward_stack_policy,
levels_json,
gift_energy_rules_json,
updated_by_admin_id,
created_at_ms,
updated_at_ms
) VALUES (
'lalu',
0,
1,
'gift_point_added',
30000,
1,
'region',
0,
'allow_stack',
JSON_ARRAY(
JSON_OBJECT('level', 1, 'energyThreshold', 1000, 'coverUrl', '', 'animationUrl', '', 'openingAnimationUrl', '', 'openedImageUrl', '', 'inRoomRewards', JSON_ARRAY(), 'top1Rewards', JSON_ARRAY(), 'igniterRewards', JSON_ARRAY()),
JSON_OBJECT('level', 2, 'energyThreshold', 3000, 'coverUrl', '', 'animationUrl', '', 'openingAnimationUrl', '', 'openedImageUrl', '', 'inRoomRewards', JSON_ARRAY(), 'top1Rewards', JSON_ARRAY(), 'igniterRewards', JSON_ARRAY()),
JSON_OBJECT('level', 3, 'energyThreshold', 6000, 'coverUrl', '', 'animationUrl', '', 'openingAnimationUrl', '', 'openedImageUrl', '', 'inRoomRewards', JSON_ARRAY(), 'top1Rewards', JSON_ARRAY(), 'igniterRewards', JSON_ARRAY()),
JSON_OBJECT('level', 4, 'energyThreshold', 10000, 'coverUrl', '', 'animationUrl', '', 'openingAnimationUrl', '', 'openedImageUrl', '', 'inRoomRewards', JSON_ARRAY(), 'top1Rewards', JSON_ARRAY(), 'igniterRewards', JSON_ARRAY()),
JSON_OBJECT('level', 5, 'energyThreshold', 15000, 'coverUrl', '', 'animationUrl', '', 'openingAnimationUrl', '', 'openedImageUrl', '', 'inRoomRewards', JSON_ARRAY(), 'top1Rewards', JSON_ARRAY(), 'igniterRewards', JSON_ARRAY()),
JSON_OBJECT('level', 6, 'energyThreshold', 21000, 'coverUrl', '', 'animationUrl', '', 'openingAnimationUrl', '', 'openedImageUrl', '', 'inRoomRewards', JSON_ARRAY(), 'top1Rewards', JSON_ARRAY(), 'igniterRewards', JSON_ARRAY()),
JSON_OBJECT('level', 7, 'energyThreshold', 28000, 'coverUrl', '', 'animationUrl', '', 'openingAnimationUrl', '', 'openedImageUrl', '', 'inRoomRewards', JSON_ARRAY(), 'top1Rewards', JSON_ARRAY(), 'igniterRewards', JSON_ARRAY())
),
JSON_ARRAY(),
0,
0,
0
);