middleware(['admin.auth', 'admin.permission'])->group(function () { // 应用管理 Route::resource('apps', AppController::class)->names([ 'index' => 'admin.openapi.apps.index', 'create' => 'admin.openapi.apps.create', 'store' => 'admin.openapi.apps.store', 'show' => 'admin.openapi.apps.show', 'edit' => 'admin.openapi.apps.edit', 'update' => 'admin.openapi.apps.update', 'destroy' => 'admin.openapi.apps.destroy', ]); // 应用管理扩展路由 Route::prefix('apps')->group(function () { Route::post('{id}/regenerate-secret', [AppController::class, 'regenerateSecret']) ->name('admin.openapi.apps.regenerate_secret'); Route::post('{id}/toggle-status', [AppController::class, 'toggleStatus']) ->name('admin.openapi.apps.toggle_status'); Route::get('{id}/stats', [AppController::class, 'stats']) ->name('admin.openapi.apps.stats'); Route::get('{id}/logs', [AppController::class, 'logs']) ->name('admin.openapi.apps.logs'); }); // API密钥管理 Route::resource('keys', KeyController::class)->names([ 'index' => 'admin.openapi.keys.index', 'create' => 'admin.openapi.keys.create', 'store' => 'admin.openapi.keys.store', 'show' => 'admin.openapi.keys.show', 'edit' => 'admin.openapi.keys.edit', 'update' => 'admin.openapi.keys.update', 'destroy' => 'admin.openapi.keys.destroy', ]); // API密钥管理扩展路由 Route::prefix('keys')->group(function () { Route::post('{id}/regenerate', [KeyController::class, 'regenerate']) ->name('admin.openapi.keys.regenerate'); Route::post('{id}/toggle-status', [KeyController::class, 'toggleStatus']) ->name('admin.openapi.keys.toggle_status'); }); // 调用日志管理 Route::resource('logs', LogController::class)->only(['index', 'show', 'destroy'])->names([ 'index' => 'admin.openapi.logs.index', 'show' => 'admin.openapi.logs.show', 'destroy' => 'admin.openapi.logs.destroy', ]); // 日志管理扩展路由 Route::prefix('logs')->group(function () { Route::delete('batch-delete', [LogController::class, 'batchDelete']) ->name('admin.openapi.logs.batch_delete'); Route::post('export', [LogController::class, 'export']) ->name('admin.openapi.logs.export'); Route::get('chart-data', [LogController::class, 'chartData']) ->name('admin.openapi.logs.chart_data'); }); // 统计分析管理 - 使用Resource注解自动注册,无需手动定义 // 统计分析扩展路由 Route::prefix('stats')->group(function () { Route::get('dashboard', [StatController::class, 'dashboard']) ->name('admin.openapi.stats.dashboard'); Route::get('export', [StatController::class, 'export']) ->name('admin.openapi.stats.export'); Route::get('chart-data', [StatController::class, 'chartData']) ->name('admin.openapi.stats.chart_data'); Route::post('generate', [StatController::class, 'generate']) ->name('admin.openapi.stats.generate'); }); // 系统配置 Route::prefix('config')->group(function () { Route::get('/', function () { return view('admin.openapi.config.index'); })->name('admin.openapi.config.index'); Route::post('update', function () { // 配置更新逻辑 return redirect()->back()->with('success', '配置更新成功'); })->name('admin.openapi.config.update'); }); // 权限管理 Route::prefix('scopes')->group(function () { Route::get('/', function () { $scopeService = app(\App\Module\OpenAPI\Services\ScopeService::class); $scopeGroups = $scopeService->getScopeGroups(); return view('admin.openapi.scopes.index', compact('scopeGroups')); })->name('admin.openapi.scopes.index'); }); // Webhook管理 Route::prefix('webhooks')->group(function () { Route::get('/', function () { $webhooks = \App\Module\OpenAPI\Models\OpenApiWebhook::with('app') ->orderBy('created_at', 'desc') ->paginate(20); return view('admin.openapi.webhooks.index', compact('webhooks')); })->name('admin.openapi.webhooks.index'); Route::get('{id}', function ($id) { $webhook = \App\Module\OpenAPI\Models\OpenApiWebhook::with('app')->findOrFail($id); return view('admin.openapi.webhooks.show', compact('webhook')); })->name('admin.openapi.webhooks.show'); Route::post('{id}/test', function ($id) { $webhook = \App\Module\OpenAPI\Models\OpenApiWebhook::findOrFail($id); $webhookService = app(\App\Module\OpenAPI\Services\WebhookService::class); $result = $webhookService->testWebhook($webhook); return response()->json($result); })->name('admin.openapi.webhooks.test'); }); // 限流管理 Route::prefix('rate-limits')->group(function () { Route::get('/', function () { $rateLimits = \App\Module\OpenAPI\Models\OpenApiRateLimit::with('app') ->orderBy('created_at', 'desc') ->paginate(20); return view('admin.openapi.rate_limits.index', compact('rateLimits')); })->name('admin.openapi.rate_limits.index'); Route::get('stats', function () { $rateLimitService = app(\App\Module\OpenAPI\Services\RateLimitService::class); // 获取限流统计数据 $stats = []; $apps = \App\Module\OpenAPI\Models\OpenApiApp::all(); foreach ($apps as $app) { $stats[$app->app_id] = $rateLimitService->getRateLimitStats($app->app_id); } return view('admin.openapi.rate_limits.stats', compact('stats')); })->name('admin.openapi.rate_limits.stats'); Route::post('{appId}/reset', function ($appId) { $rateLimitService = app(\App\Module\OpenAPI\Services\RateLimitService::class); $rateLimitService->resetRateLimit($appId); return redirect()->back()->with('success', '限流计数已重置'); })->name('admin.openapi.rate_limits.reset'); }); // 监控面板 Route::prefix('monitor')->group(function () { Route::get('/', function () { // 获取实时监控数据 $data = [ 'total_apps' => \App\Module\OpenAPI\Models\OpenApiApp::count(), 'active_apps' => \App\Module\OpenAPI\Models\OpenApiApp::where('status', 'ACTIVE')->count(), 'today_requests' => \App\Module\OpenAPI\Models\OpenApiLog::whereDate('created_at', today())->count(), 'today_errors' => \App\Module\OpenAPI\Models\OpenApiLog::whereDate('created_at', today()) ->where('response_code', '>=', 400)->count(), ]; return view('admin.openapi.monitor.index', compact('data')); })->name('admin.openapi.monitor.index'); Route::get('realtime', function () { // 实时数据API $data = [ 'timestamp' => now()->timestamp, 'requests_per_minute' => \App\Module\OpenAPI\Models\OpenApiLog::where('created_at', '>=', now()->subMinute())->count(), 'errors_per_minute' => \App\Module\OpenAPI\Models\OpenApiLog::where('created_at', '>=', now()->subMinute()) ->where('response_code', '>=', 400)->count(), 'active_ips' => \App\Module\OpenAPI\Models\OpenApiLog::where('created_at', '>=', now()->subMinute()) ->distinct('ip_address')->count(), ]; return response()->json($data); })->name('admin.openapi.monitor.realtime'); }); // 工具页面 Route::prefix('tools')->group(function () { Route::get('/', function () { return view('admin.openapi.tools.index'); })->name('admin.openapi.tools.index'); Route::get('api-tester', function () { return view('admin.openapi.tools.api_tester'); })->name('admin.openapi.tools.api_tester'); Route::post('test-api', function () { // API测试逻辑 return response()->json(['success' => true, 'message' => 'API测试完成']); })->name('admin.openapi.tools.test_api'); }); });