| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- <?php
- namespace App\Module\OpenAPI\Controllers;
- use App\Module\OpenAPI\Models\OpenApiApp;
- use App\Module\OpenAPI\Services\OpenApiService;
- use App\Module\OpenAPI\Services\ScopeService;
- use Illuminate\Http\Request;
- use Illuminate\Http\JsonResponse;
- use Spatie\RouteAttributes\Attributes\Route;
- use Spatie\RouteAttributes\Attributes\Prefix;
- use Spatie\RouteAttributes\Attributes\Middleware;
- /**
- * OpenAPI应用信息控制器
- *
- * 提供应用信息查询和管理的API接口
- */
- #[Prefix('openapi/app')]
- #[Middleware(['api', 'openapi.auth'])]
- class AppController
- {
- protected OpenApiService $openApiService;
- protected ScopeService $scopeService;
- public function __construct(
- OpenApiService $openApiService,
- ScopeService $scopeService
- ) {
- $this->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);
- }
- }
- }
|