-- 2.90 跨站节点对接：pre_node_auth、pre_node_link、访问日志；pre_qq/pre_dg_qq.cityid 与 pre_login_order.apiid 支持 link_ 前缀
-- 执行前请备份数据库。可重复执行：表已存在时请跳过或手动调整。
--
CREATE TABLE IF NOT EXISTS `pre_node_auth` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `app_id` varchar(32) NOT NULL COMMENT '凭证ID',
  `app_secret` varchar(64) NOT NULL COMMENT '通信密钥',
  `auth_type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '授权类型: 1全站 2分类 3单节点',
  `class_id` int(11) DEFAULT NULL COMMENT '分类ID（auth_type=2时）',
  `node_id` int(11) DEFAULT NULL COMMENT '节点ID（auth_type=3时）',
  `site_name` varchar(100) DEFAULT NULL COMMENT '对接方站点名称',
  `site_url` varchar(255) DEFAULT NULL COMMENT '对接方站点URL',
  `contact_qq` varchar(20) DEFAULT NULL COMMENT '联系QQ',
  `expire_time` datetime DEFAULT NULL COMMENT '授权到期时间',
  `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
  `remark` text DEFAULT NULL COMMENT '备注',
  `addtime` datetime DEFAULT NULL,
  `uptime` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`),
  KEY `idx_type_class` (`auth_type`, `class_id`),
  KEY `idx_type_node` (`auth_type`, `node_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='跨站节点授权表';

CREATE TABLE IF NOT EXISTS `pre_node_auth_log` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `app_id` varchar(32) NOT NULL,
  `node_id` int(11) NOT NULL,
  `action` varchar(50) NOT NULL COMMENT '操作类型: list/config/sync',
  `qq` varchar(15) DEFAULT NULL COMMENT 'QQ号(登录时)',
  `ip` varchar(45) DEFAULT NULL,
  `addtime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_app_time` (`app_id`, `addtime`),
  KEY `idx_node` (`node_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='节点访问日志表';

CREATE TABLE IF NOT EXISTS `pre_node_link` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `app_id` varchar(32) NOT NULL COMMENT '凭证ID',
  `app_secret` varchar(64) NOT NULL COMMENT '通信密钥',
  `api_url` varchar(255) NOT NULL COMMENT '被对接方API地址',
  `remote_node_id` int(11) NOT NULL COMMENT '被对接方节点ID',
  `remote_class_id` int(11) DEFAULT NULL COMMENT '被对接方分类ID',
  `remote_class_name` varchar(100) DEFAULT NULL COMMENT '被对接方分类名',
  `sync_type` varchar(32) DEFAULT NULL COMMENT '框架类型',
  `sync_cid` varchar(255) DEFAULT NULL COMMENT '登录协议标识',
  `sync_protocol` text DEFAULT NULL COMMENT '协议列表JSON',
  `local_class_id` int(11) NOT NULL DEFAULT 0 COMMENT '本地分类ID',
  `custom_name` varchar(100) DEFAULT NULL COMMENT '自定义名称',
  `biz` varchar(16) NOT NULL DEFAULT 'cloud' COMMENT '业务 cloud 或 dg',
  `msg` text DEFAULT NULL COMMENT '接口公告',
  `msg_type` tinyint(1) NOT NULL DEFAULT 0 COMMENT '公告位置',
  `max` int(11) NOT NULL DEFAULT 0 COMMENT '上限人数',
  `show_online_census` tinyint(1) NOT NULL DEFAULT 1 COMMENT '显示人数',
  `apipwd` varchar(32) DEFAULT NULL COMMENT '接口密码（对接方自设）',
  `api_error_check` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'API异常检测',
  `sort` int(11) NOT NULL DEFAULT 10 COMMENT '排序',
  `sync_online_census` int(11) NOT NULL DEFAULT 0 COMMENT '在线人数(缓存)',
  `expire_time` datetime DEFAULT NULL COMMENT '授权到期时间(缓存)',
  `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态 1启用 0禁用',
  `last_sync_time` datetime DEFAULT NULL COMMENT '上次同步时间',
  `addtime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_node_biz` (`api_url`, `remote_node_id`, `biz`),
  KEY `idx_app` (`app_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='对接节点链接表';

INSERT IGNORE INTO `pre_config` (`k`,`v`) VALUES ('node_auth_enabled', '1');

-- cityid 需存 link_数字，与 int 节点 ID 区分
ALTER TABLE `pre_qq` MODIFY `cityid` VARCHAR(40) NOT NULL DEFAULT '0' COMMENT '登录接口ID或link_前缀';
ALTER TABLE `pre_dg_qq` MODIFY `cityid` VARCHAR(40) NOT NULL DEFAULT '0' COMMENT '登录接口ID或link_前缀';

ALTER TABLE `pre_login_order` MODIFY `apiid` VARCHAR(40) DEFAULT NULL COMMENT '登录节点ID或link_前缀';

-- 2.90 对接节点按业务区分：唯一键包含 biz，避免同一远程节点在云端/代挂/全部间互相覆盖
-- 适用：曾执行旧版（唯一键仅为 api_url+remote_node_id）的库。
-- 若 install/update2.90.sql 已是 uniq_node_biz（新装），请勿执行本文件。
-- （已注释掉，因为在上方 CREATE TABLE 中已经包含了 uniq_node_biz，直接执行会报 [1061]Duplicate key name）
-- ALTER TABLE `pre_node_link` DROP INDEX `uniq_node`;
-- ALTER TABLE `pre_node_link` ADD UNIQUE KEY `uniq_node_biz` (`api_url`, `remote_node_id`, `biz`);

