group(function () { Route::get('/projects', [EnvController::class, 'getProjects']); Route::get('/projects/{project}/envs', [EnvController::class, 'getEnvs']); Route::get('/projects/{project}/envs/{env}', [EnvController::class, 'getEnvContent']); Route::get('/projects/{project}/current-env', [EnvController::class, 'getCurrentEnv']); Route::post('/envs/save', [EnvController::class, 'saveEnv']); Route::post('/envs/apply', [EnvController::class, 'applyEnv']); Route::post('/envs/import', [EnvController::class, 'importEnv']); Route::post('/envs/create', [EnvController::class, 'createEnv']); Route::delete('/projects/{project}/envs/{env}', [EnvController::class, 'deleteEnv']); }); // SQL 生成器 API 路由 Route::prefix('sql-generator')->group(function () { Route::post('/ob-external-id/check', [SqlGeneratorController::class, 'checkObExternalId']); }); // JIRA API路由 Route::prefix('jira')->group(function () { Route::get('/config', [JiraController::class, 'getConfig']); Route::post('/weekly-report', [JiraController::class, 'generateWeeklyReport']); Route::post('/work-logs', [JiraController::class, 'getWorkLogs']); Route::get('/weekly-report/download', [JiraController::class, 'downloadWeeklyReport']); }); // 消息同步API路由 Route::prefix('message-sync')->group(function () { Route::post('/query', [MessageSyncController::class, 'queryMessages']); Route::post('/sync', [MessageSyncController::class, 'syncMessages']); Route::get('/config', [MessageSyncController::class, 'getAgentConfig']); Route::get('/test-connection', [MessageSyncController::class, 'testConnection']); Route::post('/compare-event-consumer', [MessageSyncController::class, 'compareEventConsumerSync']); Route::post('/export-missing-messages', [MessageSyncController::class, 'exportMissingMessages']); }); // 消息分发API路由 Route::prefix('message-dispatch')->group(function () { Route::get('/services', [MessageDispatchController::class, 'getAvailableServices']); Route::get('/country-codes', [MessageDispatchController::class, 'getAvailableCountryCodes']); Route::get('/domains', [MessageDispatchController::class, 'getAvailableDomains']); Route::get('/service-routes', [MessageDispatchController::class, 'getServiceRoutes']); Route::get('/abnormal', [MessageDispatchController::class, 'getAbnormalDispatches']); Route::post('/batch-update', [MessageDispatchController::class, 'batchUpdateDispatch']); }); // 操作日志(所有人可查看,用户名字段对非管理员隐藏) Route::get('/operation-logs', [OperationLogController::class, 'index']); // 管理员信息(不受白名单限制) Route::get('/admin/meta', [AdminMetaController::class, 'show']); // 管理员IP白名单限定的后台接口 Route::prefix('admin')->middleware('admin.ip')->group(function () { Route::get('/configs', [ConfigController::class, 'index']); Route::post('/configs', [ConfigController::class, 'store']); Route::put('/configs/{config}', [ConfigController::class, 'update']); Route::delete('/configs/{config}', [ConfigController::class, 'destroy']); Route::get('/ip-user-mappings', [IpUserMappingController::class, 'index']); Route::post('/ip-user-mappings', [IpUserMappingController::class, 'store']); Route::put('/ip-user-mappings/{mapping}', [IpUserMappingController::class, 'update']); Route::delete('/ip-user-mappings/{mapping}', [IpUserMappingController::class, 'destroy']); }); // 日志分析 API 路由 Route::prefix('log-analysis')->group(function () { // 日志查询(预览) Route::post('/query', [LogAnalysisController::class, 'queryLogs']); // AI 分析 Route::post('/analyze', [LogAnalysisController::class, 'analyze']); // 历史报告 Route::get('/reports', [LogAnalysisController::class, 'listReports']); Route::get('/reports/{id}', [LogAnalysisController::class, 'getReport']); // 配置(读取不需要管理员权限) Route::get('/config', [LogAnalysisController::class, 'getConfig']); // 获取 logstore 列表 Route::get('/logstores', [LogAnalysisController::class, 'getLogstores']); // 连接测试 Route::get('/test-sls', [LogAnalysisController::class, 'testSlsConnection']); Route::get('/test-ai', [LogAnalysisController::class, 'testAiConnection']); // 配置更新(需要管理员权限) Route::put('/config', [LogAnalysisController::class, 'updateConfig']) ->middleware('admin.ip'); });