ApiController.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. namespace App\Module\OpenAPI\Controllers;
  3. use App\Module\OpenAPI\Contracts\HandlerInterface;
  4. use App\Module\OpenAPI\Handlers\User\UserInfoHandler;
  5. use App\Module\OpenAPI\Handlers\User\UserListHandler;
  6. use App\Module\OpenAPI\Handlers\Game\GameStatsHandler;
  7. use App\Module\OpenAPI\Handlers\Fund\FundBalanceHandler;
  8. use Illuminate\Http\JsonResponse;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Routing\Controller;
  11. use Illuminate\Routing\Middleware\SubstituteBindings;
  12. use Illuminate\Routing\Attributes\Middleware;
  13. use Illuminate\Routing\Attributes\Prefix;
  14. /**
  15. * OpenAPI业务接口控制器
  16. *
  17. * 使用Handler机制处理具体的业务逻辑
  18. */
  19. #[Prefix('api/openapi')]
  20. #[Middleware(['api', 'openapi'])]
  21. class ApiController extends Controller
  22. {
  23. /**
  24. * 获取用户信息
  25. *
  26. * @param Request $request
  27. * @param UserInfoHandler $handler
  28. * @return JsonResponse
  29. */
  30. #[Middleware('openapi.scope:USER_READ')]
  31. public function getUserInfo(Request $request, UserInfoHandler $handler): JsonResponse
  32. {
  33. return $this->handleRequest($request, $handler);
  34. }
  35. /**
  36. * 获取用户列表
  37. *
  38. * @param Request $request
  39. * @param UserListHandler $handler
  40. * @return JsonResponse
  41. */
  42. #[Middleware('openapi.scope:USER_READ')]
  43. public function getUserList(Request $request, UserListHandler $handler): JsonResponse
  44. {
  45. return $this->handleRequest($request, $handler);
  46. }
  47. /**
  48. * 获取游戏统计
  49. *
  50. * @param Request $request
  51. * @param GameStatsHandler $handler
  52. * @return JsonResponse
  53. */
  54. #[Middleware('openapi.scope:GAME_READ')]
  55. public function getGameStats(Request $request, GameStatsHandler $handler): JsonResponse
  56. {
  57. return $this->handleRequest($request, $handler);
  58. }
  59. /**
  60. * 获取资金余额
  61. *
  62. * @param Request $request
  63. * @param FundBalanceHandler $handler
  64. * @return JsonResponse
  65. */
  66. #[Middleware('openapi.scope:FUND_READ')]
  67. public function getFundBalance(Request $request, FundBalanceHandler $handler): JsonResponse
  68. {
  69. return $this->handleRequest($request, $handler);
  70. }
  71. /**
  72. * 通用请求处理方法
  73. *
  74. * @param Request $request
  75. * @param HandlerInterface $handler
  76. * @return JsonResponse
  77. */
  78. protected function handleRequest(Request $request, HandlerInterface $handler): JsonResponse
  79. {
  80. try {
  81. // 准备请求数据
  82. $data = array_merge(
  83. $request->all(),
  84. $request->route()->parameters()
  85. );
  86. // 准备上下文信息
  87. $context = [
  88. 'app' => $request->attributes->get('openapi_app'),
  89. 'user_id' => $request->attributes->get('user_id', 0),
  90. 'ip' => $request->ip(),
  91. 'user_agent' => $request->userAgent(),
  92. 'request_id' => $request->header('X-Request-ID', uniqid()),
  93. ];
  94. // 调用Handler处理请求
  95. return $handler->handle($data, $context);
  96. } catch (\Exception $e) {
  97. return response()->json([
  98. 'success' => false,
  99. 'message' => '请求处理失败',
  100. 'error' => $e->getMessage(),
  101. ], 500);
  102. }
  103. }
  104. }