openApiService = $openApiService; $this->scopeService = $scopeService; } /** * 获取应用信息 * * @param Request $request * @return JsonResponse */ #[Route('GET', '/info', name: 'openapi.app.info')] #[Middleware('openapi.scope:APP_READ')] public function info(Request $request): JsonResponse { $startTime = microtime(true); // 初始化请求日志记录器 $requestLogger = new \App\Module\System\Services\RequestLogger($request); $requestLogger->setRouter("openapi/app/info"); try { // 从请求中获取应用信息(由认证中间件设置) $app = $request->attributes->get('openapi_app'); if (!$app) { $requestLogger->setError('应用信息不存在'); $requestLogger->setRunTime($startTime); return response()->json([ 'success' => false, 'message' => '应用信息不存在', ], 404); } // 记录运行时间 $requestLogger->setRunTime($startTime); return response()->json([ 'success' => true, 'data' => [ 'app_id' => $app->app_id, 'name' => $app->name, 'description' => $app->description, 'website' => $app->website, 'logo' => $app->logo, 'status' => $app->status, 'auth_type' => $app->auth_type, 'scopes' => $app->scopes, 'created_at' => $app->created_at, 'updated_at' => $app->updated_at, ], ]); } catch (\Exception $e) { // 记录错误信息和运行时间 $requestLogger->setError($e->getMessage()); $requestLogger->setRunTime($startTime); return response()->json([ 'success' => false, 'message' => '获取应用信息失败', 'error' => $e->getMessage(), ], 500); } } /** * 获取应用权限范围 * * @param Request $request * @return JsonResponse */ #[Route('GET', '/scopes', name: 'openapi.app.scopes')] #[Middleware('openapi.scope:APP_READ')] public function scopes(Request $request): JsonResponse { try { $app = $request->attributes->get('openapi_app'); if (!$app) { return response()->json([ 'success' => false, 'message' => '应用信息不存在', ], 404); } $scopes = $this->scopeService->getAppScopes($app); $scopeGroups = $this->scopeService->getScopeGroups(); return response()->json([ 'success' => true, 'data' => [ 'app_scopes' => $scopes, 'available_scopes' => $scopeGroups, ], ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => '获取权限范围失败', 'error' => $e->getMessage(), ], 500); } } /** * 获取应用统计信息 * * @param Request $request * @return JsonResponse */ #[Route('GET', '/stats', name: 'openapi.app.stats')] #[Middleware('openapi.scope:APP_READ')] public function stats(Request $request): JsonResponse { try { $app = $request->attributes->get('openapi_app'); if (!$app) { return response()->json([ 'success' => false, 'message' => '应用信息不存在', ], 404); } $period = $request->get('period', 'day'); $validPeriods = ['hour', 'day', 'week', 'month']; if (!in_array($period, $validPeriods)) { return response()->json([ 'success' => false, 'message' => '无效的统计周期', ], 400); } // 获取API调用统计 $apiStats = $this->openApiService->getAppStats($app->app_id, $period); return response()->json([ 'success' => true, 'data' => $apiStats, ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => '获取统计信息失败', 'error' => $e->getMessage(), ], 500); } } /** * 更新应用信息 * * @param Request $request * @return JsonResponse */ #[Route('PUT', '/update', name: 'openapi.app.update')] #[Middleware('openapi.scope:APP_WRITE')] public function update(Request $request): JsonResponse { try { $app = $request->attributes->get('openapi_app'); if (!$app) { return response()->json([ 'success' => false, 'message' => '应用信息不存在', ], 404); } // 使用标准验证系统 $requestData = $request->only(['name', 'description', 'website', 'logo', 'callback_url', 'contact_email']); $validation = new \App\Module\OpenAPI\Validations\AppUpdateValidation($requestData); $validation->validate(); if ($validation->isFail()) { return response()->json([ 'success' => false, 'message' => '数据验证失败', 'errors' => $validation->getErrors(), ], 422); } $data = $validation->getSafeData(); // 更新应用信息 $updatedApp = $this->openApiService->updateApp($app->id, $data); return response()->json([ 'success' => true, 'message' => '应用信息更新成功', 'data' => [ 'app_id' => $updatedApp->app_id, 'name' => $updatedApp->name, 'description' => $updatedApp->description, 'website' => $updatedApp->website, 'logo' => $updatedApp->logo, 'callback_url' => $updatedApp->callback_url, 'contact_email' => $updatedApp->contact_email, 'updated_at' => $updatedApp->updated_at, ], ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => '更新应用信息失败', 'error' => $e->getMessage(), ], 500); } } /** * 重新生成应用密钥 * * @param Request $request * @return JsonResponse */ #[Route('POST', '/regenerate-secret', name: 'openapi.app.regenerate_secret')] #[Middleware('openapi.scope:APP_WRITE')] public function regenerateSecret(Request $request): JsonResponse { try { $app = $request->attributes->get('openapi_app'); if (!$app) { return response()->json([ 'success' => false, 'message' => '应用信息不存在', ], 404); } // 重新生成密钥 $newSecret = $this->openApiService->regenerateAppSecret($app->id); return response()->json([ 'success' => true, 'message' => '应用密钥重新生成成功', 'data' => [ 'app_id' => $app->app_id, 'app_secret' => $newSecret, 'regenerated_at' => now(), ], ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => '重新生成密钥失败', 'error' => $e->getMessage(), ], 500); } } /** * 获取应用配额信息 * * @param Request $request * @return JsonResponse */ #[Route('GET', '/quota', name: 'openapi.app.quota')] #[Middleware('openapi.scope:APP_READ')] public function quota(Request $request): JsonResponse { try { $app = $request->attributes->get('openapi_app'); if (!$app) { return response()->json([ 'success' => false, 'message' => '应用信息不存在', ], 404); } // 获取配额信息 $quotaInfo = $this->openApiService->getAppQuota($app->app_id); return response()->json([ 'success' => true, 'data' => $quotaInfo, ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => '获取配额信息失败', 'error' => $e->getMessage(), ], 500); } } }