-- OpenAPI模块 - 开放API应用表
-- 用于管理第三方应用的注册信息和配置

CREATE TABLE `kku_openapi_apps` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  `app_secret` text NOT NULL COMMENT '应用密钥(加密存储)',
  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '应用名称',
  `description` text COMMENT '应用描述',
  `website` varchar(500) NOT NULL DEFAULT '' COMMENT '应用网站',
  `logo` varchar(500) NOT NULL DEFAULT '' COMMENT '应用Logo',
  `callback_url` varchar(500) NOT NULL DEFAULT '' COMMENT '回调地址',
  `contact_email` varchar(255) NOT NULL DEFAULT '' COMMENT '联系邮箱',
  `status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT '应用状态',
  `auth_type` varchar(20) NOT NULL DEFAULT 'API_KEY' COMMENT '认证类型',
  `scopes` json COMMENT '权限范围',
  `rate_limits` json COMMENT '限流配置',
  `ip_whitelist` json COMMENT 'IP白名单',
  `user_id` int(11) NOT NULL DEFAULT 0 COMMENT '创建用户ID',
  `user_name` varchar(100) NOT NULL DEFAULT '' COMMENT '创建用户名称',
  `approved_at` timestamp NULL DEFAULT NULL COMMENT '审核时间',
  `approved_by` int(11) DEFAULT NULL COMMENT '审核人ID',
  `approved_note` text COMMENT '审核备注',
  `expires_at` timestamp NULL DEFAULT NULL COMMENT '过期时间',
  `last_used_at` timestamp NULL DEFAULT NULL COMMENT '最后使用时间',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_app_id` (`app_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_status` (`status`),
  KEY `idx_auth_type` (`auth_type`),
  KEY `idx_expires_at` (`expires_at`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='开放API应用表';

-- OpenAPI模块 - API调用日志表
-- 用于记录所有API调用的详细信息

CREATE TABLE `kku_openapi_logs` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  `user_id` int(11) DEFAULT NULL COMMENT '用户ID',
  `method` varchar(10) NOT NULL DEFAULT '' COMMENT '请求方法',
  `uri` varchar(500) NOT NULL DEFAULT '' COMMENT '请求URI',
  `params` json COMMENT '请求参数',
  `headers` json COMMENT '请求头',
  `ip_address` varchar(45) NOT NULL DEFAULT '' COMMENT 'IP地址',
  `user_agent` text COMMENT '用户代理',
  `response_code` int(11) NOT NULL DEFAULT 0 COMMENT '响应状态码',
  `response_time` int(11) NOT NULL DEFAULT 0 COMMENT '响应时间(毫秒)',
  `response_size` int(11) NOT NULL DEFAULT 0 COMMENT '响应大小(字节)',
  `error_message` text COMMENT '错误信息',
  `scope` varchar(50) NOT NULL DEFAULT '' COMMENT '使用的权限范围',
  `rate_limit_hit` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否触发限流',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_app_id` (`app_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_method` (`method`),
  KEY `idx_response_code` (`response_code`),
  KEY `idx_scope` (`scope`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_ip_address` (`ip_address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API调用日志表';

-- OpenAPI模块 - API权限范围表
-- 用于定义和管理API权限范围

CREATE TABLE `kku_openapi_scopes` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `scope_name` varchar(50) NOT NULL DEFAULT '' COMMENT '权限范围名称',
  `scope_label` varchar(100) NOT NULL DEFAULT '' COMMENT '权限范围标签',
  `description` text COMMENT '权限描述',
  `category` varchar(50) NOT NULL DEFAULT '' COMMENT '权限分类',
  `risk_level` tinyint(4) NOT NULL DEFAULT 1 COMMENT '风险级别(1-5)',
  `is_default` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否默认权限',
  `is_enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
  `dependencies` json COMMENT '依赖的权限',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_scope_name` (`scope_name`),
  KEY `idx_category` (`category`),
  KEY `idx_risk_level` (`risk_level`),
  KEY `idx_is_enabled` (`is_enabled`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API权限范围表';

-- 插入默认权限范围数据
INSERT INTO `kku_openapi_scopes` (`scope_name`, `scope_label`, `description`, `category`, `risk_level`, `is_default`) VALUES
('USER_READ', '读取用户信息', '允许读取用户基本信息、游戏数据等', '用户管理', 1, 1),
('USER_WRITE', '修改用户信息', '允许修改用户基本信息、游戏设置等', '用户管理', 3, 0),
('USER_DELETE', '删除用户信息', '允许删除用户账户（危险操作）', '用户管理', 5, 0),
('GAME_READ', '读取游戏数据', '允许读取游戏内数据，如等级、经验等', '游戏数据', 1, 1),
('GAME_WRITE', '修改游戏数据', '允许修改游戏内数据，如经验、等级等', '游戏数据', 3, 0),
('GAME_ADMIN', '游戏管理权限', '允许执行游戏管理操作，如重置数据等', '游戏数据', 5, 0),
('ITEM_READ', '读取物品信息', '允许读取用户物品信息和库存', '物品管理', 1, 0),
('ITEM_WRITE', '修改物品信息', '允许修改物品属性和数量', '物品管理', 3, 0),
('ITEM_TRANSFER', '转移物品', '允许在用户间转移物品', '物品管理', 4, 0),
('FUND_READ', '读取资金信息', '允许读取用户资金余额和记录', '资金管理', 2, 0),
('FUND_WRITE', '修改资金信息', '允许修改用户资金余额', '资金管理', 4, 0),
('FUND_TRANSFER', '转账权限', '允许执行转账操作', '资金管理', 5, 0),
('TRADE_READ', '读取交易信息', '允许读取交易记录和市场信息', '交易管理', 1, 0),
('TRADE_WRITE', '创建交易', '允许创建新的交易订单', '交易管理', 3, 0),
('TRADE_CANCEL', '取消交易', '允许取消交易订单', '交易管理', 3, 0),
('STATS_READ', '读取统计数据', '允许读取统计数据和报表', '统计分析', 1, 0),
('STATS_EXPORT', '导出统计数据', '允许导出统计数据', '统计分析', 2, 0),
('SYSTEM_READ', '读取系统信息', '允许读取系统状态和配置信息', '系统管理', 2, 0),
('SYSTEM_ADMIN', '系统管理权限', '允许执行系统管理操作', '系统管理', 5, 0);

-- OpenAPI模块 - API统计表
-- 用于存储API调用统计数据

CREATE TABLE `kku_openapi_stats` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  `date` date NOT NULL COMMENT '统计日期',
  `hour` tinyint(4) DEFAULT NULL COMMENT '统计小时(0-23)',
  `total_requests` int(11) NOT NULL DEFAULT 0 COMMENT '总请求数',
  `successful_requests` int(11) NOT NULL DEFAULT 0 COMMENT '成功请求数',
  `failed_requests` int(11) NOT NULL DEFAULT 0 COMMENT '失败请求数',
  `rate_limited_requests` int(11) NOT NULL DEFAULT 0 COMMENT '被限流请求数',
  `average_response_time` int(11) NOT NULL DEFAULT 0 COMMENT '平均响应时间(毫秒)',
  `total_response_size` bigint(20) NOT NULL DEFAULT 0 COMMENT '总响应大小(字节)',
  `unique_ips` int(11) NOT NULL DEFAULT 0 COMMENT '唯一IP数量',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_app_date_hour` (`app_id`, `date`, `hour`),
  KEY `idx_date` (`date`),
  KEY `idx_hour` (`hour`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API统计表';

-- OpenAPI模块 - Webhook配置表
-- 用于管理应用的回调配置

CREATE TABLE `kku_openapi_webhooks` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  `event_type` varchar(50) NOT NULL DEFAULT '' COMMENT '事件类型',
  `webhook_url` varchar(500) NOT NULL DEFAULT '' COMMENT '回调URL',
  `secret` varchar(255) NOT NULL DEFAULT '' COMMENT '签名密钥',
  `is_enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
  `retry_times` tinyint(4) NOT NULL DEFAULT 3 COMMENT '重试次数',
  `timeout` int(11) NOT NULL DEFAULT 10 COMMENT '超时时间(秒)',
  `last_triggered_at` timestamp NULL DEFAULT NULL COMMENT '最后触发时间',
  `last_success_at` timestamp NULL DEFAULT NULL COMMENT '最后成功时间',
  `failure_count` int(11) NOT NULL DEFAULT 0 COMMENT '连续失败次数',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_app_id` (`app_id`),
  KEY `idx_event_type` (`event_type`),
  KEY `idx_is_enabled` (`is_enabled`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Webhook配置表';

-- OpenAPI模块 - 限流记录表
-- 用于记录限流状态和统计

CREATE TABLE `kku_openapi_rate_limits` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  `scope` varchar(50) NOT NULL DEFAULT '' COMMENT '权限范围',
  `ip_address` varchar(45) NOT NULL DEFAULT '' COMMENT 'IP地址',
  `window_start` timestamp NOT NULL COMMENT '时间窗口开始',
  `window_end` timestamp NOT NULL COMMENT '时间窗口结束',
  `request_count` int(11) NOT NULL DEFAULT 0 COMMENT '请求次数',
  `limit_count` int(11) NOT NULL DEFAULT 0 COMMENT '限制次数',
  `is_blocked` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否被阻止',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_app_scope_ip_window` (`app_id`, `scope`, `ip_address`, `window_start`),
  KEY `idx_window_end` (`window_end`),
  KEY `idx_is_blocked` (`is_blocked`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='限流记录表';
