admin.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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. // 统计分析管理 - 使用Resource注解自动注册,无需手动定义
  72. // 统计分析扩展路由
  73. Route::prefix('stats')->group(function () {
  74. Route::get('dashboard', [StatController::class, 'dashboard'])
  75. ->name('admin.openapi.stats.dashboard');
  76. Route::get('export', [StatController::class, 'export'])
  77. ->name('admin.openapi.stats.export');
  78. Route::get('chart-data', [StatController::class, 'chartData'])
  79. ->name('admin.openapi.stats.chart_data');
  80. Route::post('generate', [StatController::class, 'generate'])
  81. ->name('admin.openapi.stats.generate');
  82. });
  83. // 系统配置
  84. Route::prefix('config')->group(function () {
  85. Route::get('/', function () {
  86. return view('admin.openapi.config.index');
  87. })->name('admin.openapi.config.index');
  88. Route::post('update', function () {
  89. // 配置更新逻辑
  90. return redirect()->back()->with('success', '配置更新成功');
  91. })->name('admin.openapi.config.update');
  92. });
  93. // 权限管理
  94. Route::prefix('scopes')->group(function () {
  95. Route::get('/', function () {
  96. $scopeService = app(\App\Module\OpenAPI\Services\ScopeService::class);
  97. $scopeGroups = $scopeService->getScopeGroups();
  98. return view('admin.openapi.scopes.index', compact('scopeGroups'));
  99. })->name('admin.openapi.scopes.index');
  100. });
  101. // Webhook管理
  102. Route::prefix('webhooks')->group(function () {
  103. Route::get('/', function () {
  104. $webhooks = \App\Module\OpenAPI\Models\OpenApiWebhook::with('app')
  105. ->orderBy('created_at', 'desc')
  106. ->paginate(20);
  107. return view('admin.openapi.webhooks.index', compact('webhooks'));
  108. })->name('admin.openapi.webhooks.index');
  109. Route::get('{id}', function ($id) {
  110. $webhook = \App\Module\OpenAPI\Models\OpenApiWebhook::with('app')->findOrFail($id);
  111. return view('admin.openapi.webhooks.show', compact('webhook'));
  112. })->name('admin.openapi.webhooks.show');
  113. Route::post('{id}/test', function ($id) {
  114. $webhook = \App\Module\OpenAPI\Models\OpenApiWebhook::findOrFail($id);
  115. $webhookService = app(\App\Module\OpenAPI\Services\WebhookService::class);
  116. $result = $webhookService->testWebhook($webhook);
  117. return response()->json($result);
  118. })->name('admin.openapi.webhooks.test');
  119. });
  120. // 限流管理
  121. Route::prefix('rate-limits')->group(function () {
  122. Route::get('/', function () {
  123. $rateLimits = \App\Module\OpenAPI\Models\OpenApiRateLimit::with('app')
  124. ->orderBy('created_at', 'desc')
  125. ->paginate(20);
  126. return view('admin.openapi.rate_limits.index', compact('rateLimits'));
  127. })->name('admin.openapi.rate_limits.index');
  128. Route::get('stats', function () {
  129. $rateLimitService = app(\App\Module\OpenAPI\Services\RateLimitService::class);
  130. // 获取限流统计数据
  131. $stats = [];
  132. $apps = \App\Module\OpenAPI\Models\OpenApiApp::all();
  133. foreach ($apps as $app) {
  134. $stats[$app->app_id] = $rateLimitService->getRateLimitStats($app->app_id);
  135. }
  136. return view('admin.openapi.rate_limits.stats', compact('stats'));
  137. })->name('admin.openapi.rate_limits.stats');
  138. Route::post('{appId}/reset', function ($appId) {
  139. $rateLimitService = app(\App\Module\OpenAPI\Services\RateLimitService::class);
  140. $rateLimitService->resetRateLimit($appId);
  141. return redirect()->back()->with('success', '限流计数已重置');
  142. })->name('admin.openapi.rate_limits.reset');
  143. });
  144. // 监控面板
  145. Route::prefix('monitor')->group(function () {
  146. Route::get('/', function () {
  147. // 获取实时监控数据
  148. $data = [
  149. 'total_apps' => \App\Module\OpenAPI\Models\OpenApiApp::count(),
  150. 'active_apps' => \App\Module\OpenAPI\Models\OpenApiApp::where('status', 'ACTIVE')->count(),
  151. 'today_requests' => \App\Module\OpenAPI\Models\OpenApiLog::whereDate('created_at', today())->count(),
  152. 'today_errors' => \App\Module\OpenAPI\Models\OpenApiLog::whereDate('created_at', today())
  153. ->where('response_code', '>=', 400)->count(),
  154. ];
  155. return view('admin.openapi.monitor.index', compact('data'));
  156. })->name('admin.openapi.monitor.index');
  157. Route::get('realtime', function () {
  158. // 实时数据API
  159. $data = [
  160. 'timestamp' => now()->timestamp,
  161. 'requests_per_minute' => \App\Module\OpenAPI\Models\OpenApiLog::where('created_at', '>=', now()->subMinute())->count(),
  162. 'errors_per_minute' => \App\Module\OpenAPI\Models\OpenApiLog::where('created_at', '>=', now()->subMinute())
  163. ->where('response_code', '>=', 400)->count(),
  164. 'active_ips' => \App\Module\OpenAPI\Models\OpenApiLog::where('created_at', '>=', now()->subMinute())
  165. ->distinct('ip_address')->count(),
  166. ];
  167. return response()->json($data);
  168. })->name('admin.openapi.monitor.realtime');
  169. });
  170. // 工具页面
  171. Route::prefix('tools')->group(function () {
  172. Route::get('/', function () {
  173. return view('admin.openapi.tools.index');
  174. })->name('admin.openapi.tools.index');
  175. Route::get('api-tester', function () {
  176. return view('admin.openapi.tools.api_tester');
  177. })->name('admin.openapi.tools.api_tester');
  178. Route::post('test-api', function () {
  179. // API测试逻辑
  180. return response()->json(['success' => true, 'message' => 'API测试完成']);
  181. })->name('admin.openapi.tools.test_api');
  182. });
  183. });