-- OpenAPI模块数据库表结构 -- 用于管理第三方应用的注册信息、API密钥、调用日志等 -- 1. 开放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应用表'; -- 2. API密钥表 CREATE TABLE `kku_openapi_keys` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID', `key_id` varchar(64) NOT NULL DEFAULT '' COMMENT '密钥ID', `key_secret` varchar(255) NOT NULL DEFAULT '' COMMENT '密钥Secret(加密存储)', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '密钥名称', `description` text COMMENT '密钥描述', `scopes` json COMMENT '权限范围', `status` varchar(20) NOT NULL DEFAULT 'ACTIVE' COMMENT '密钥状态', `last_used_at` timestamp NULL DEFAULT NULL COMMENT '最后使用时间', `expires_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_key_id` (`key_id`), KEY `idx_app_id` (`app_id`), KEY `idx_status` (`status`), KEY `idx_expires_at` (`expires_at`), KEY `idx_last_used_at` (`last_used_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API密钥表'; -- 3. 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', `request_id` varchar(64) NOT NULL DEFAULT '' COMMENT '请求ID', `method` varchar(10) NOT NULL DEFAULT '' COMMENT '请求方法', `uri` varchar(500) NOT NULL DEFAULT '' COMMENT '请求路径', `headers` json COMMENT '请求头', `query_params` json COMMENT '查询参数', `body` text COMMENT '请求体', `response_status` int(11) NOT NULL DEFAULT 0 COMMENT '响应状态码', `response_headers` json COMMENT '响应头', `response_body` text COMMENT '响应体', `response_time` int(11) NOT NULL DEFAULT 0 COMMENT '响应时间(毫秒)', `ip_address` varchar(45) NOT NULL DEFAULT '' COMMENT 'IP地址', `user_agent` text COMMENT 'User Agent', `error_message` text COMMENT '错误信息', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_app_id` (`app_id`), KEY `idx_request_id` (`request_id`), KEY `idx_method` (`method`), KEY `idx_response_status` (`response_status`), KEY `idx_response_time` (`response_time`), KEY `idx_ip_address` (`ip_address`), KEY `idx_created_at` (`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API调用日志表'; -- 4. API权限范围表 CREATE TABLE `kku_openapi_scopes` ( `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 '权限范围', `name` varchar(100) NOT NULL DEFAULT '' COMMENT '权限名称', `description` text COMMENT '权限描述', `category` varchar(50) NOT NULL DEFAULT '' COMMENT '权限分类', `risk_level` varchar(20) NOT NULL DEFAULT 'LOW' COMMENT '风险级别', `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否激活', `granted_at` timestamp NULL DEFAULT NULL COMMENT '授权时间', `expires_at` timestamp NULL DEFAULT NULL COMMENT '过期时间', `granted_by` varchar(100) DEFAULT NULL COMMENT '授权人', `notes` text 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` (`app_id`, `scope`), KEY `idx_app_id` (`app_id`), KEY `idx_scope` (`scope`), KEY `idx_category` (`category`), KEY `idx_risk_level` (`risk_level`), KEY `idx_is_active` (`is_active`), KEY `idx_expires_at` (`expires_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API权限范围表'; -- 插入默认权限范围数据 INSERT INTO `kku_openapi_scopes` (`app_id`, `scope`, `name`, `description`, `category`, `risk_level`) VALUES ('', 'USER_READ', '读取用户信息', '允许读取用户基本信息、游戏数据等', '用户管理', 'LOW'), ('', 'USER_WRITE', '修改用户信息', '允许修改用户基本信息、游戏设置等', '用户管理', 'MEDIUM'), ('', 'USER_DELETE', '删除用户信息', '允许删除用户账户(危险操作)', '用户管理', 'CRITICAL'), ('', 'GAME_READ', '读取游戏数据', '允许读取游戏内数据,如等级、经验等', '游戏数据', 'LOW'), ('', 'GAME_WRITE', '修改游戏数据', '允许修改游戏内数据,如经验、等级等', '游戏数据', 'MEDIUM'), ('', 'GAME_ADMIN', '游戏管理权限', '允许执行游戏管理操作,如重置数据等', '游戏数据', 'CRITICAL'), ('', 'ITEM_READ', '读取物品信息', '允许读取用户物品信息和库存', '物品管理', 'LOW'), ('', 'ITEM_WRITE', '修改物品信息', '允许修改物品属性和数量', '物品管理', 'MEDIUM'), ('', 'ITEM_TRANSFER', '转移物品', '允许在用户间转移物品', '物品管理', 'HIGH'), ('', 'FUND_READ', '读取资金信息', '允许读取用户资金余额和记录', '资金管理', 'MEDIUM'), ('', 'FUND_WRITE', '修改资金信息', '允许修改用户资金余额', '资金管理', 'HIGH'), ('', 'FUND_TRANSFER', '转账权限', '允许执行转账操作', '资金管理', 'CRITICAL'), ('', 'TRADE_READ', '读取交易信息', '允许读取交易记录和市场信息', '交易管理', 'LOW'), ('', 'TRADE_WRITE', '创建交易', '允许创建新的交易订单', '交易管理', 'MEDIUM'), ('', 'TRADE_CANCEL', '取消交易', '允许取消交易订单', '交易管理', 'MEDIUM'), ('', 'STATS_READ', '读取统计数据', '允许读取统计数据和报表', '统计分析', 'LOW'), ('', 'STATS_EXPORT', '导出统计数据', '允许导出统计数据', '统计分析', 'MEDIUM'), ('', 'SYSTEM_READ', '读取系统信息', '允许读取系统状态和配置信息', '系统管理', 'MEDIUM'), ('', 'SYSTEM_ADMIN', '系统管理权限', '允许执行系统管理操作', '系统管理', 'CRITICAL'); -- 5. 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)', `endpoint` varchar(500) NOT NULL DEFAULT '' COMMENT '接口端点', `request_count` int(11) NOT NULL DEFAULT 0 COMMENT '请求次数', `success_count` int(11) NOT NULL DEFAULT 0 COMMENT '成功次数', `error_count` int(11) NOT NULL DEFAULT 0 COMMENT '错误次数', `avg_response_time` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '平均响应时间(毫秒)', `max_response_time` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '最大响应时间(毫秒)', `min_response_time` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '最小响应时间(毫秒)', `rate_limit_hits` int(11) NOT NULL DEFAULT 0 COMMENT '限流命中次数', `unique_ips` int(11) NOT NULL DEFAULT 0 COMMENT '唯一IP数量', `error_details` 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_app_date_hour_endpoint` (`app_id`, `date`, `hour`, `endpoint`), KEY `idx_app_id` (`app_id`), KEY `idx_date` (`date`), KEY `idx_hour` (`hour`), KEY `idx_endpoint` (`endpoint`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API统计表'; -- 6. 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', `name` varchar(255) NOT NULL DEFAULT '' COMMENT 'Webhook名称', `url` varchar(500) NOT NULL DEFAULT '' COMMENT '回调URL', `events` json COMMENT '监听的事件类型', `secret` varchar(255) NOT NULL DEFAULT '' COMMENT '签名密钥', `status` varchar(20) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态', `timeout` int(11) NOT NULL DEFAULT 30 COMMENT '超时时间(秒)', `retry_count` int(11) NOT NULL DEFAULT 3 COMMENT '重试次数', `current_retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '当前重试次数', `total_deliveries` int(11) NOT NULL DEFAULT 0 COMMENT '总投递次数', `successful_deliveries` int(11) NOT NULL DEFAULT 0 COMMENT '成功投递次数', `failed_deliveries` int(11) NOT NULL DEFAULT 0 COMMENT '失败投递次数', `last_success_at` timestamp NULL DEFAULT NULL COMMENT '最后成功时间', `last_failure_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`), KEY `idx_app_id` (`app_id`), KEY `idx_status` (`status`), KEY `idx_last_success_at` (`last_success_at`), KEY `idx_last_failure_at` (`last_failure_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Webhook配置表'; -- 7. 限流记录表 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', `ip_address` varchar(45) NOT NULL DEFAULT '' COMMENT 'IP地址', `endpoint` varchar(500) NOT NULL DEFAULT '' COMMENT '接口端点', `limit_type` varchar(50) NOT NULL DEFAULT '' COMMENT '限制类型', `window_start` timestamp NOT NULL COMMENT '时间窗口开始', `request_count` int(11) NOT NULL DEFAULT 0 COMMENT '请求次数', `is_blocked` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否被阻止', `user_agent` text COMMENT '用户代理', `headers` 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`), KEY `idx_app_id` (`app_id`), KEY `idx_ip_address` (`ip_address`), KEY `idx_endpoint` (`endpoint`), KEY `idx_limit_type` (`limit_type`), KEY `idx_window_start` (`window_start`), KEY `idx_is_blocked` (`is_blocked`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='限流记录表';