admin.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <?php
  2. use Illuminate\Support\Facades\Route;
  3. use App\Module\OpenAPI\AdminControllers\AppController;
  4. use App\Module\OpenAPI\AdminControllers\KeyController;
  5. use App\Module\OpenAPI\AdminControllers\LogController;
  6. use App\Module\OpenAPI\AdminControllers\StatController;
  7. /*
  8. |--------------------------------------------------------------------------
  9. | OpenAPI Admin Routes
  10. |--------------------------------------------------------------------------
  11. |
  12. | 这里定义OpenAPI模块的后台管理路由
  13. | 所有路由都需要通过后台认证中间件
  14. |
  15. */
  16. // OpenAPI后台管理路由组
  17. Route::prefix('openapi')->middleware(['admin.auth', 'admin.permission'])->group(function () {
  18. // 应用管理
  19. Route::resource('apps', AppController::class)->names([
  20. 'index' => 'admin.openapi.apps.index',
  21. 'create' => 'admin.openapi.apps.create',
  22. 'store' => 'admin.openapi.apps.store',
  23. 'show' => 'admin.openapi.apps.show',
  24. 'edit' => 'admin.openapi.apps.edit',
  25. 'update' => 'admin.openapi.apps.update',
  26. 'destroy' => 'admin.openapi.apps.destroy',
  27. ]);
  28. // 应用管理扩展路由
  29. Route::prefix('apps')->group(function () {
  30. Route::post('{id}/regenerate-secret', [AppController::class, 'regenerateSecret'])
  31. ->name('admin.openapi.apps.regenerate_secret');
  32. Route::post('{id}/toggle-status', [AppController::class, 'toggleStatus'])
  33. ->name('admin.openapi.apps.toggle_status');
  34. Route::get('{id}/stats', [AppController::class, 'stats'])
  35. ->name('admin.openapi.apps.stats');
  36. Route::get('{id}/logs', [AppController::class, 'logs'])
  37. ->name('admin.openapi.apps.logs');
  38. });
  39. // API密钥管理
  40. Route::resource('keys', KeyController::class)->names([
  41. 'index' => 'admin.openapi.keys.index',
  42. 'create' => 'admin.openapi.keys.create',
  43. 'store' => 'admin.openapi.keys.store',
  44. 'show' => 'admin.openapi.keys.show',
  45. 'edit' => 'admin.openapi.keys.edit',
  46. 'update' => 'admin.openapi.keys.update',
  47. 'destroy' => 'admin.openapi.keys.destroy',
  48. ]);
  49. // API密钥管理扩展路由
  50. Route::prefix('keys')->group(function () {
  51. Route::post('{id}/regenerate', [KeyController::class, 'regenerate'])
  52. ->name('admin.openapi.keys.regenerate');
  53. Route::post('{id}/toggle-status', [KeyController::class, 'toggleStatus'])
  54. ->name('admin.openapi.keys.toggle_status');
  55. });
  56. // 调用日志管理
  57. Route::resource('logs', LogController::class)->only(['index', 'show', 'destroy'])->names([
  58. 'index' => 'admin.openapi.logs.index',
  59. 'show' => 'admin.openapi.logs.show',
  60. 'destroy' => 'admin.openapi.logs.destroy',
  61. ]);
  62. // 日志管理扩展路由
  63. Route::prefix('logs')->group(function () {
  64. Route::delete('batch-delete', [LogController::class, 'batchDelete'])
  65. ->name('admin.openapi.logs.batch_delete');
  66. Route::post('export', [LogController::class, 'export'])
  67. ->name('admin.openapi.logs.export');
  68. Route::get('chart-data', [LogController::class, 'chartData'])
  69. ->name('admin.openapi.logs.chart_data');
  70. });
  71. // 统计分析管理
  72. Route::resource('stats', StatController::class)->only(['index', 'show'])->names([
  73. 'index' => 'admin.openapi.stats.index',
  74. 'show' => 'admin.openapi.stats.show',
  75. ]);
  76. // 统计分析扩展路由
  77. Route::prefix('stats')->group(function () {
  78. Route::get('dashboard', [StatController::class, 'dashboard'])
  79. ->name('admin.openapi.stats.dashboard');
  80. Route::get('export', [StatController::class, 'export'])
  81. ->name('admin.openapi.stats.export');
  82. Route::get('chart-data', [StatController::class, 'chartData'])
  83. ->name('admin.openapi.stats.chart_data');
  84. Route::post('generate', [StatController::class, 'generate'])
  85. ->name('admin.openapi.stats.generate');
  86. });
  87. // 系统配置
  88. Route::prefix('config')->group(function () {
  89. Route::get('/', function () {
  90. return view('admin.openapi.config.index');
  91. })->name('admin.openapi.config.index');
  92. Route::post('update', function () {
  93. // 配置更新逻辑
  94. return redirect()->back()->with('success', '配置更新成功');
  95. })->name('admin.openapi.config.update');
  96. });
  97. // 权限管理
  98. Route::prefix('scopes')->group(function () {
  99. Route::get('/', function () {
  100. $scopeService = app(\App\Module\OpenAPI\Services\ScopeService::class);
  101. $scopeGroups = $scopeService->getScopeGroups();
  102. return view('admin.openapi.scopes.index', compact('scopeGroups'));
  103. })->name('admin.openapi.scopes.index');
  104. });
  105. // Webhook管理
  106. Route::prefix('webhooks')->group(function () {
  107. Route::get('/', function () {
  108. $webhooks = \App\Module\OpenAPI\Models\OpenApiWebhook::with('app')
  109. ->orderBy('created_at', 'desc')
  110. ->paginate(20);
  111. return view('admin.openapi.webhooks.index', compact('webhooks'));
  112. })->name('admin.openapi.webhooks.index');
  113. Route::get('{id}', function ($id) {
  114. $webhook = \App\Module\OpenAPI\Models\OpenApiWebhook::with('app')->findOrFail($id);
  115. return view('admin.openapi.webhooks.show', compact('webhook'));
  116. })->name('admin.openapi.webhooks.show');
  117. Route::post('{id}/test', function ($id) {
  118. $webhook = \App\Module\OpenAPI\Models\OpenApiWebhook::findOrFail($id);
  119. $webhookService = app(\App\Module\OpenAPI\Services\WebhookService::class);
  120. $result = $webhookService->testWebhook($webhook);
  121. return response()->json($result);
  122. })->name('admin.openapi.webhooks.test');
  123. });
  124. // 限流管理
  125. Route::prefix('rate-limits')->group(function () {
  126. Route::get('/', function () {
  127. $rateLimits = \App\Module\OpenAPI\Models\OpenApiRateLimit::with('app')
  128. ->orderBy('created_at', 'desc')
  129. ->paginate(20);
  130. return view('admin.openapi.rate_limits.index', compact('rateLimits'));
  131. })->name('admin.openapi.rate_limits.index');
  132. Route::get('stats', function () {
  133. $rateLimitService = app(\App\Module\OpenAPI\Services\RateLimitService::class);
  134. // 获取限流统计数据
  135. $stats = [];
  136. $apps = \App\Module\OpenAPI\Models\OpenApiApp::all();
  137. foreach ($apps as $app) {
  138. $stats[$app->app_id] = $rateLimitService->getRateLimitStats($app->app_id);
  139. }
  140. return view('admin.openapi.rate_limits.stats', compact('stats'));
  141. })->name('admin.openapi.rate_limits.stats');
  142. Route::post('{appId}/reset', function ($appId) {
  143. $rateLimitService = app(\App\Module\OpenAPI\Services\RateLimitService::class);
  144. $rateLimitService->resetRateLimit($appId);
  145. return redirect()->back()->with('success', '限流计数已重置');
  146. })->name('admin.openapi.rate_limits.reset');
  147. });
  148. // 监控面板
  149. Route::prefix('monitor')->group(function () {
  150. Route::get('/', function () {
  151. // 获取实时监控数据
  152. $data = [
  153. 'total_apps' => \App\Module\OpenAPI\Models\OpenApiApp::count(),
  154. 'active_apps' => \App\Module\OpenAPI\Models\OpenApiApp::where('status', 'ACTIVE')->count(),
  155. 'today_requests' => \App\Module\OpenAPI\Models\OpenApiLog::whereDate('created_at', today())->count(),
  156. 'today_errors' => \App\Module\OpenAPI\Models\OpenApiLog::whereDate('created_at', today())
  157. ->where('response_code', '>=', 400)->count(),
  158. ];
  159. return view('admin.openapi.monitor.index', compact('data'));
  160. })->name('admin.openapi.monitor.index');
  161. Route::get('realtime', function () {
  162. // 实时数据API
  163. $data = [
  164. 'timestamp' => now()->timestamp,
  165. 'requests_per_minute' => \App\Module\OpenAPI\Models\OpenApiLog::where('created_at', '>=', now()->subMinute())->count(),
  166. 'errors_per_minute' => \App\Module\OpenAPI\Models\OpenApiLog::where('created_at', '>=', now()->subMinute())
  167. ->where('response_code', '>=', 400)->count(),
  168. 'active_ips' => \App\Module\OpenAPI\Models\OpenApiLog::where('created_at', '>=', now()->subMinute())
  169. ->distinct('ip_address')->count(),
  170. ];
  171. return response()->json($data);
  172. })->name('admin.openapi.monitor.realtime');
  173. });
  174. // 工具页面
  175. Route::prefix('tools')->group(function () {
  176. Route::get('/', function () {
  177. return view('admin.openapi.tools.index');
  178. })->name('admin.openapi.tools.index');
  179. Route::get('api-tester', function () {
  180. return view('admin.openapi.tools.api_tester');
  181. })->name('admin.openapi.tools.api_tester');
  182. Route::post('test-api', function () {
  183. // API测试逻辑
  184. return response()->json(['success' => true, 'message' => 'API测试完成']);
  185. })->name('admin.openapi.tools.test_api');
  186. });
  187. });