openapi_tables.sql 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. -- OpenAPI模块数据库表结构
  2. -- 用于管理第三方应用的注册信息、API密钥、调用日志等
  3. -- 1. 开放API应用表
  4. CREATE TABLE `kku_openapi_apps` (
  5. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  6. `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  7. `app_secret` text NOT NULL COMMENT '应用密钥(加密存储)',
  8. `name` varchar(255) NOT NULL DEFAULT '' COMMENT '应用名称',
  9. `description` text COMMENT '应用描述',
  10. `website` varchar(500) NOT NULL DEFAULT '' COMMENT '应用网站',
  11. `logo` varchar(500) NOT NULL DEFAULT '' COMMENT '应用Logo',
  12. `callback_url` varchar(500) NOT NULL DEFAULT '' COMMENT '回调地址',
  13. `contact_email` varchar(255) NOT NULL DEFAULT '' COMMENT '联系邮箱',
  14. `status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT '应用状态',
  15. `auth_type` varchar(20) NOT NULL DEFAULT 'API_KEY' COMMENT '认证类型',
  16. `scopes` json COMMENT '权限范围',
  17. `rate_limits` json COMMENT '限流配置',
  18. `ip_whitelist` json COMMENT 'IP白名单',
  19. `user_id` int(11) NOT NULL DEFAULT 0 COMMENT '创建用户ID',
  20. `user_name` varchar(100) NOT NULL DEFAULT '' COMMENT '创建用户名称',
  21. `approved_at` timestamp NULL DEFAULT NULL COMMENT '审核时间',
  22. `approved_by` int(11) DEFAULT NULL COMMENT '审核人ID',
  23. `approved_note` text COMMENT '审核备注',
  24. `expires_at` timestamp NULL DEFAULT NULL COMMENT '过期时间',
  25. `last_used_at` timestamp NULL DEFAULT NULL COMMENT '最后使用时间',
  26. `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  27. `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  28. PRIMARY KEY (`id`),
  29. UNIQUE KEY `uk_app_id` (`app_id`),
  30. KEY `idx_user_id` (`user_id`),
  31. KEY `idx_status` (`status`),
  32. KEY `idx_auth_type` (`auth_type`),
  33. KEY `idx_expires_at` (`expires_at`),
  34. KEY `idx_created_at` (`created_at`)
  35. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='开放API应用表';
  36. -- 2. API密钥表
  37. CREATE TABLE `kku_openapi_keys` (
  38. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  39. `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  40. `key_id` varchar(64) NOT NULL DEFAULT '' COMMENT '密钥ID',
  41. `key_secret` varchar(255) NOT NULL DEFAULT '' COMMENT '密钥Secret(加密存储)',
  42. `name` varchar(255) NOT NULL DEFAULT '' COMMENT '密钥名称',
  43. `description` text COMMENT '密钥描述',
  44. `scopes` json COMMENT '权限范围',
  45. `status` varchar(20) NOT NULL DEFAULT 'ACTIVE' COMMENT '密钥状态',
  46. `last_used_at` timestamp NULL DEFAULT NULL COMMENT '最后使用时间',
  47. `expires_at` timestamp NULL DEFAULT NULL COMMENT '过期时间',
  48. `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  49. `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  50. PRIMARY KEY (`id`),
  51. UNIQUE KEY `uk_key_id` (`key_id`),
  52. KEY `idx_app_id` (`app_id`),
  53. KEY `idx_status` (`status`),
  54. KEY `idx_expires_at` (`expires_at`),
  55. KEY `idx_last_used_at` (`last_used_at`)
  56. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API密钥表';
  57. -- 3. API调用日志表
  58. CREATE TABLE `kku_openapi_logs` (
  59. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  60. `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  61. `request_id` varchar(64) NOT NULL DEFAULT '' COMMENT '请求ID',
  62. `method` varchar(10) NOT NULL DEFAULT '' COMMENT '请求方法',
  63. `uri` varchar(500) NOT NULL DEFAULT '' COMMENT '请求路径',
  64. `headers` json COMMENT '请求头',
  65. `query_params` json COMMENT '查询参数',
  66. `body` text COMMENT '请求体',
  67. `response_status` int(11) NOT NULL DEFAULT 0 COMMENT '响应状态码',
  68. `response_headers` json COMMENT '响应头',
  69. `response_body` text COMMENT '响应体',
  70. `response_time` int(11) NOT NULL DEFAULT 0 COMMENT '响应时间(毫秒)',
  71. `ip_address` varchar(45) NOT NULL DEFAULT '' COMMENT 'IP地址',
  72. `user_agent` text COMMENT 'User Agent',
  73. `error_message` text COMMENT '错误信息',
  74. `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  75. PRIMARY KEY (`id`),
  76. KEY `idx_app_id` (`app_id`),
  77. KEY `idx_request_id` (`request_id`),
  78. KEY `idx_method` (`method`),
  79. KEY `idx_response_status` (`response_status`),
  80. KEY `idx_response_time` (`response_time`),
  81. KEY `idx_ip_address` (`ip_address`),
  82. KEY `idx_created_at` (`created_at`)
  83. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API调用日志表';
  84. -- 4. API权限范围表
  85. CREATE TABLE `kku_openapi_scopes` (
  86. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  87. `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  88. `scope` varchar(50) NOT NULL DEFAULT '' COMMENT '权限范围',
  89. `name` varchar(100) NOT NULL DEFAULT '' COMMENT '权限名称',
  90. `description` text COMMENT '权限描述',
  91. `category` varchar(50) NOT NULL DEFAULT '' COMMENT '权限分类',
  92. `risk_level` varchar(20) NOT NULL DEFAULT 'LOW' COMMENT '风险级别',
  93. `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否激活',
  94. `granted_at` timestamp NULL DEFAULT NULL COMMENT '授权时间',
  95. `expires_at` timestamp NULL DEFAULT NULL COMMENT '过期时间',
  96. `granted_by` varchar(100) DEFAULT NULL COMMENT '授权人',
  97. `notes` text COMMENT '备注',
  98. `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  99. `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  100. PRIMARY KEY (`id`),
  101. UNIQUE KEY `uk_app_scope` (`app_id`, `scope`),
  102. KEY `idx_app_id` (`app_id`),
  103. KEY `idx_scope` (`scope`),
  104. KEY `idx_category` (`category`),
  105. KEY `idx_risk_level` (`risk_level`),
  106. KEY `idx_is_active` (`is_active`),
  107. KEY `idx_expires_at` (`expires_at`)
  108. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API权限范围表';
  109. -- 插入默认权限范围数据
  110. INSERT INTO `kku_openapi_scopes` (`scope_name`, `scope_label`, `description`, `category`, `risk_level`, `is_default`) VALUES
  111. ('USER_READ', '读取用户信息', '允许读取用户基本信息、游戏数据等', '用户管理', 1, 1),
  112. ('USER_WRITE', '修改用户信息', '允许修改用户基本信息、游戏设置等', '用户管理', 3, 0),
  113. ('USER_DELETE', '删除用户信息', '允许删除用户账户(危险操作)', '用户管理', 5, 0),
  114. ('GAME_READ', '读取游戏数据', '允许读取游戏内数据,如等级、经验等', '游戏数据', 1, 1),
  115. ('GAME_WRITE', '修改游戏数据', '允许修改游戏内数据,如经验、等级等', '游戏数据', 3, 0),
  116. ('GAME_ADMIN', '游戏管理权限', '允许执行游戏管理操作,如重置数据等', '游戏数据', 5, 0),
  117. ('ITEM_READ', '读取物品信息', '允许读取用户物品信息和库存', '物品管理', 1, 0),
  118. ('ITEM_WRITE', '修改物品信息', '允许修改物品属性和数量', '物品管理', 3, 0),
  119. ('ITEM_TRANSFER', '转移物品', '允许在用户间转移物品', '物品管理', 4, 0),
  120. ('FUND_READ', '读取资金信息', '允许读取用户资金余额和记录', '资金管理', 2, 0),
  121. ('FUND_WRITE', '修改资金信息', '允许修改用户资金余额', '资金管理', 4, 0),
  122. ('FUND_TRANSFER', '转账权限', '允许执行转账操作', '资金管理', 5, 0),
  123. ('TRADE_READ', '读取交易信息', '允许读取交易记录和市场信息', '交易管理', 1, 0),
  124. ('TRADE_WRITE', '创建交易', '允许创建新的交易订单', '交易管理', 3, 0),
  125. ('TRADE_CANCEL', '取消交易', '允许取消交易订单', '交易管理', 3, 0),
  126. ('STATS_READ', '读取统计数据', '允许读取统计数据和报表', '统计分析', 1, 0),
  127. ('STATS_EXPORT', '导出统计数据', '允许导出统计数据', '统计分析', 2, 0),
  128. ('SYSTEM_READ', '读取系统信息', '允许读取系统状态和配置信息', '系统管理', 2, 0),
  129. ('SYSTEM_ADMIN', '系统管理权限', '允许执行系统管理操作', '系统管理', 5, 0);
  130. -- 5. API统计表
  131. CREATE TABLE `kku_openapi_stats` (
  132. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  133. `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  134. `date` date NOT NULL COMMENT '统计日期',
  135. `hour` tinyint(4) DEFAULT NULL COMMENT '统计小时(0-23)',
  136. `endpoint` varchar(500) NOT NULL DEFAULT '' COMMENT '接口端点',
  137. `request_count` int(11) NOT NULL DEFAULT 0 COMMENT '请求次数',
  138. `success_count` int(11) NOT NULL DEFAULT 0 COMMENT '成功次数',
  139. `error_count` int(11) NOT NULL DEFAULT 0 COMMENT '错误次数',
  140. `avg_response_time` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '平均响应时间(毫秒)',
  141. `max_response_time` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '最大响应时间(毫秒)',
  142. `min_response_time` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '最小响应时间(毫秒)',
  143. `rate_limit_hits` int(11) NOT NULL DEFAULT 0 COMMENT '限流命中次数',
  144. `unique_ips` int(11) NOT NULL DEFAULT 0 COMMENT '唯一IP数量',
  145. `error_details` json COMMENT '错误详情',
  146. `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  147. `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  148. PRIMARY KEY (`id`),
  149. UNIQUE KEY `uk_app_date_hour_endpoint` (`app_id`, `date`, `hour`, `endpoint`),
  150. KEY `idx_app_id` (`app_id`),
  151. KEY `idx_date` (`date`),
  152. KEY `idx_hour` (`hour`),
  153. KEY `idx_endpoint` (`endpoint`)
  154. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API统计表';
  155. -- 6. Webhook配置表
  156. CREATE TABLE `kku_openapi_webhooks` (
  157. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  158. `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  159. `name` varchar(255) NOT NULL DEFAULT '' COMMENT 'Webhook名称',
  160. `url` varchar(500) NOT NULL DEFAULT '' COMMENT '回调URL',
  161. `events` json COMMENT '监听的事件类型',
  162. `secret` varchar(255) NOT NULL DEFAULT '' COMMENT '签名密钥',
  163. `status` varchar(20) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
  164. `timeout` int(11) NOT NULL DEFAULT 30 COMMENT '超时时间(秒)',
  165. `retry_count` int(11) NOT NULL DEFAULT 3 COMMENT '重试次数',
  166. `current_retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '当前重试次数',
  167. `total_deliveries` int(11) NOT NULL DEFAULT 0 COMMENT '总投递次数',
  168. `successful_deliveries` int(11) NOT NULL DEFAULT 0 COMMENT '成功投递次数',
  169. `failed_deliveries` int(11) NOT NULL DEFAULT 0 COMMENT '失败投递次数',
  170. `last_success_at` timestamp NULL DEFAULT NULL COMMENT '最后成功时间',
  171. `last_failure_at` timestamp NULL DEFAULT NULL COMMENT '最后失败时间',
  172. `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  173. `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  174. PRIMARY KEY (`id`),
  175. KEY `idx_app_id` (`app_id`),
  176. KEY `idx_status` (`status`),
  177. KEY `idx_last_success_at` (`last_success_at`),
  178. KEY `idx_last_failure_at` (`last_failure_at`)
  179. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Webhook配置表';
  180. -- 7. 限流记录表
  181. CREATE TABLE `kku_openapi_rate_limits` (
  182. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  183. `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '应用ID',
  184. `ip_address` varchar(45) NOT NULL DEFAULT '' COMMENT 'IP地址',
  185. `endpoint` varchar(500) NOT NULL DEFAULT '' COMMENT '接口端点',
  186. `limit_type` varchar(50) NOT NULL DEFAULT '' COMMENT '限制类型',
  187. `window_start` timestamp NOT NULL COMMENT '时间窗口开始',
  188. `request_count` int(11) NOT NULL DEFAULT 0 COMMENT '请求次数',
  189. `is_blocked` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否被阻止',
  190. `user_agent` text COMMENT '用户代理',
  191. `headers` json COMMENT '请求头信息',
  192. `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  193. `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  194. PRIMARY KEY (`id`),
  195. KEY `idx_app_id` (`app_id`),
  196. KEY `idx_ip_address` (`ip_address`),
  197. KEY `idx_endpoint` (`endpoint`),
  198. KEY `idx_limit_type` (`limit_type`),
  199. KEY `idx_window_start` (`window_start`),
  200. KEY `idx_is_blocked` (`is_blocked`)
  201. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='限流记录表';