kt-template-online-api/sql/qqbot-message-push-init.sql

199 lines
9.4 KiB
SQL

-- QQBot 系统消息推送生产增量迁移。
-- 仅创建本功能六表、默认模板、菜单和角色授权,不执行历史 QQBot 迁移。
CREATE TABLE IF NOT EXISTS qqbot_message_subscription (
id BIGINT NOT NULL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
source_key VARCHAR(128) NOT NULL,
source_config JSON NOT NULL,
source_config_digest CHAR(64) NOT NULL,
active_key VARCHAR(255) NULL,
enabled TINYINT(1) NOT NULL DEFAULT 1,
remark VARCHAR(500) NULL,
is_deleted TINYINT(1) NOT NULL DEFAULT 0,
create_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
update_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
UNIQUE KEY uk_qqbot_message_subscription_active_key (active_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS qqbot_message_template (
id BIGINT NOT NULL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
source_key VARCHAR(128) NOT NULL,
content TEXT NOT NULL,
enabled TINYINT(1) NOT NULL DEFAULT 1,
remark VARCHAR(500) NULL,
is_deleted TINYINT(1) NOT NULL DEFAULT 0,
create_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
update_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS qqbot_message_publish_binding (
id BIGINT NOT NULL PRIMARY KEY,
subscription_id BIGINT NOT NULL,
account_id BIGINT NOT NULL,
self_id VARCHAR(64) NOT NULL,
template_id BIGINT NOT NULL,
active_key VARCHAR(255) NULL,
enabled TINYINT(1) NOT NULL DEFAULT 1,
is_deleted TINYINT(1) NOT NULL DEFAULT 0,
create_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
update_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
UNIQUE KEY uk_qqbot_message_publish_binding_active_key (active_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS qqbot_message_publish_target (
id BIGINT NOT NULL PRIMARY KEY,
binding_id BIGINT NOT NULL,
target_type VARCHAR(16) NOT NULL,
target_id VARCHAR(64) NOT NULL,
target_name VARCHAR(120) NULL,
active_key VARCHAR(300) NULL,
enabled TINYINT(1) NOT NULL DEFAULT 1,
is_deleted TINYINT(1) NOT NULL DEFAULT 0,
create_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
update_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
UNIQUE KEY uk_qqbot_message_publish_target_active_key (active_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS qqbot_message_event (
id BIGINT NOT NULL PRIMARY KEY,
event_id VARCHAR(128) NOT NULL,
source_key VARCHAR(128) NOT NULL,
resource_key VARCHAR(128) NOT NULL,
occurred_at DATETIME(6) NOT NULL,
payload JSON NOT NULL,
fanout_status VARCHAR(32) NOT NULL DEFAULT 'accepted',
fanout_attempt_count INT UNSIGNED NOT NULL DEFAULT 0,
next_fanout_at DATETIME(6) NULL,
fanout_lease_until DATETIME(6) NULL,
last_error_code VARCHAR(64) NULL,
last_error_message VARCHAR(500) NULL,
create_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
update_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
UNIQUE KEY uk_qqbot_message_event_event_id (event_id),
KEY idx_qqbot_message_event_dispatch (fanout_status, next_fanout_at),
KEY idx_qqbot_message_event_lease (fanout_lease_until),
KEY idx_qqbot_message_event_source_resource_order (source_key, resource_key, occurred_at, id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS qqbot_message_delivery (
id BIGINT NOT NULL PRIMARY KEY,
message_event_id BIGINT NOT NULL,
publish_target_id BIGINT NOT NULL,
binding_id BIGINT NOT NULL,
subscription_id BIGINT NOT NULL,
self_id VARCHAR(64) NOT NULL,
target_type VARCHAR(16) NOT NULL,
target_id VARCHAR(64) NOT NULL,
template_id BIGINT NOT NULL,
template_content TEXT NOT NULL,
variable_snapshot JSON NOT NULL,
rendered_message TEXT NOT NULL,
status VARCHAR(32) NOT NULL,
attempt_count INT UNSIGNED NOT NULL DEFAULT 0,
next_attempt_at DATETIME(6) NULL,
processing_lease_until DATETIME(6) NULL,
send_log_id BIGINT NULL,
last_error_code VARCHAR(64) NULL,
last_error_message VARCHAR(500) NULL,
expires_at DATETIME(6) NOT NULL,
create_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
update_time DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
UNIQUE KEY uk_qqbot_message_delivery_event_target (message_event_id, publish_target_id),
KEY idx_qqbot_message_delivery_dispatch (status, next_attempt_at),
KEY idx_qqbot_message_delivery_lease (processing_lease_until),
KEY idx_qqbot_message_delivery_history (subscription_id, message_event_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO qqbot_message_template (id, name, source_key, content, enabled, remark, is_deleted)
SELECT
2041700000000200601,
'STUN 映射端口变更默认模板',
'network.stun.mapping-port-changed',
'当前STUN的端口已变更为${{endpoint}}',
1,
'系统默认模板',
0
WHERE NOT EXISTS (
SELECT 1
FROM qqbot_message_template
WHERE source_key = 'network.stun.mapping-port-changed'
AND name = 'STUN 映射端口变更默认模板'
AND is_deleted = 0
);
INSERT INTO admin_menu (
id,
pid,
name,
path,
component,
redirect,
auth_code,
type,
meta,
status,
sort
) VALUES
(2041700000000100413,2041700000000100400,'QqBotMessageSubscription','/qqbot/message-subscription','/qqbot/message-subscription/list',NULL,'QqBot:MessageSubscription:List','menu','{"icon":"lucide:bell-ring","title":"消息订阅"}',1,10),
(2041700000000100414,2041700000000100400,'QqBotMessageTemplate','/qqbot/message-template','/qqbot/message-template/list',NULL,'QqBot:MessageTemplate:List','menu','{"icon":"lucide:message-square-plus","title":"消息模板"}',1,11),
(2041700000000120461,2041700000000100413,'QqBotMessageSubscriptionList',NULL,NULL,NULL,'QqBot:MessageSubscription:List','button','{"title":"common.list"}',1,0),
(2041700000000120462,2041700000000100413,'QqBotMessageSubscriptionCreate',NULL,NULL,NULL,'QqBot:MessageSubscription:Create','button','{"title":"common.create"}',1,0),
(2041700000000120463,2041700000000100413,'QqBotMessageSubscriptionUpdate',NULL,NULL,NULL,'QqBot:MessageSubscription:Update','button','{"title":"common.edit"}',1,0),
(2041700000000120464,2041700000000100413,'QqBotMessageSubscriptionDelete',NULL,NULL,NULL,'QqBot:MessageSubscription:Delete','button','{"title":"common.delete"}',1,0),
(2041700000000120465,2041700000000100413,'QqBotMessageSubscriptionToggle',NULL,NULL,NULL,'QqBot:MessageSubscription:Toggle','button','{"title":"启停"}',1,0),
(2041700000000120471,2041700000000100414,'QqBotMessageTemplateList',NULL,NULL,NULL,'QqBot:MessageTemplate:List','button','{"title":"common.list"}',1,0),
(2041700000000120472,2041700000000100414,'QqBotMessageTemplateCreate',NULL,NULL,NULL,'QqBot:MessageTemplate:Create','button','{"title":"common.create"}',1,0),
(2041700000000120473,2041700000000100414,'QqBotMessageTemplateUpdate',NULL,NULL,NULL,'QqBot:MessageTemplate:Update','button','{"title":"common.edit"}',1,0),
(2041700000000120474,2041700000000100414,'QqBotMessageTemplateDelete',NULL,NULL,NULL,'QqBot:MessageTemplate:Delete','button','{"title":"common.delete"}',1,0),
(2041700000000120475,2041700000000100414,'QqBotMessageTemplateToggle',NULL,NULL,NULL,'QqBot:MessageTemplate:Toggle','button','{"title":"启停"}',1,0),
(2041700000000120476,2041700000000100414,'QqBotMessageTemplatePreview',NULL,NULL,NULL,'QqBot:MessageTemplate:Preview','button','{"title":"预览"}',1,0),
(2041700000000120481,2041700000000100410,'QqBotAccountMessagePushList',NULL,NULL,NULL,'QqBot:Account:MessagePush:List','button','{"title":"common.list"}',1,0),
(2041700000000120482,2041700000000100410,'QqBotAccountMessagePushCreate',NULL,NULL,NULL,'QqBot:Account:MessagePush:Create','button','{"title":"common.create"}',1,0),
(2041700000000120483,2041700000000100410,'QqBotAccountMessagePushUpdate',NULL,NULL,NULL,'QqBot:Account:MessagePush:Update','button','{"title":"common.edit"}',1,0),
(2041700000000120484,2041700000000100410,'QqBotAccountMessagePushDelete',NULL,NULL,NULL,'QqBot:Account:MessagePush:Delete','button','{"title":"common.delete"}',1,0),
(2041700000000120485,2041700000000100410,'QqBotAccountMessagePushToggle',NULL,NULL,NULL,'QqBot:Account:MessagePush:Toggle','button','{"title":"启停"}',1,0)
ON DUPLICATE KEY UPDATE
pid = VALUES(pid),
name = VALUES(name),
path = VALUES(path),
component = VALUES(component),
redirect = VALUES(redirect),
auth_code = VALUES(auth_code),
type = VALUES(type),
meta = VALUES(meta),
status = VALUES(status),
sort = VALUES(sort),
is_deleted = 0;
INSERT IGNORE INTO admin_role_menu (role_id, menu_id)
SELECT role.id, menu.id
FROM admin_role role
CROSS JOIN admin_menu menu
WHERE role.role_code IN ('super', 'admin')
AND role.status = 1
AND role.is_deleted = 0
AND menu.id IN (
2041700000000100413,
2041700000000100414,
2041700000000120461,
2041700000000120462,
2041700000000120463,
2041700000000120464,
2041700000000120465,
2041700000000120471,
2041700000000120472,
2041700000000120473,
2041700000000120474,
2041700000000120475,
2041700000000120476,
2041700000000120481,
2041700000000120482,
2041700000000120483,
2041700000000120484,
2041700000000120485
)
AND menu.status = 1
AND menu.is_deleted = 0;