ApiController.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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 App\Module\OpenAPI\Handlers\Fund\DiamondRechargeHandler;
  9. use App\Module\OpenAPI\Handlers\Fund\DiamondWithdrawHandler;
  10. use Illuminate\Http\JsonResponse;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Routing\Controller;
  13. use Illuminate\Routing\Middleware\SubstituteBindings;
  14. use Illuminate\Routing\Attributes\Middleware;
  15. use Illuminate\Routing\Attributes\Prefix;
  16. /**
  17. * OpenAPI业务接口控制器
  18. *
  19. * 使用Handler机制处理具体的业务逻辑
  20. */
  21. #[Prefix('api/openapi')]
  22. #[Middleware(['api', 'openapi'])]
  23. class ApiController extends Controller
  24. {
  25. /**
  26. * 获取用户信息
  27. *
  28. * @param Request $request
  29. * @param UserInfoHandler $handler
  30. * @return JsonResponse
  31. */
  32. #[Middleware('openapi.scope:USER_READ')]
  33. public function getUserInfo(Request $request, UserInfoHandler $handler): JsonResponse
  34. {
  35. return $this->handleRequest($request, $handler);
  36. }
  37. /**
  38. * 获取用户列表
  39. *
  40. * @param Request $request
  41. * @param UserListHandler $handler
  42. * @return JsonResponse
  43. */
  44. #[Middleware('openapi.scope:USER_READ')]
  45. public function getUserList(Request $request, UserListHandler $handler): JsonResponse
  46. {
  47. return $this->handleRequest($request, $handler);
  48. }
  49. /**
  50. * 获取游戏统计
  51. *
  52. * @param Request $request
  53. * @param GameStatsHandler $handler
  54. * @return JsonResponse
  55. */
  56. #[Middleware('openapi.scope:GAME_READ')]
  57. public function getGameStats(Request $request, GameStatsHandler $handler): JsonResponse
  58. {
  59. return $this->handleRequest($request, $handler);
  60. }
  61. /**
  62. * 获取资金余额
  63. *
  64. * @param Request $request
  65. * @param FundBalanceHandler $handler
  66. * @return JsonResponse
  67. */
  68. #[Middleware('openapi.scope:FUND_READ')]
  69. public function getFundBalance(Request $request, FundBalanceHandler $handler): JsonResponse
  70. {
  71. return $this->handleRequest($request, $handler);
  72. }
  73. /**
  74. * 钻石充值
  75. *
  76. * @param Request $request
  77. * @param DiamondRechargeHandler $handler
  78. * @return JsonResponse
  79. */
  80. #[Middleware('openapi.scope:FUND_RECHARGE')]
  81. public function diamondRecharge(Request $request, DiamondRechargeHandler $handler): JsonResponse
  82. {
  83. return $this->handleRequest($request, $handler);
  84. }
  85. /**
  86. * 钻石提取
  87. *
  88. * @param Request $request
  89. * @param DiamondWithdrawHandler $handler
  90. * @return JsonResponse
  91. */
  92. #[Middleware('openapi.scope:FUND_WITHDRAW')]
  93. public function diamondWithdraw(Request $request, DiamondWithdrawHandler $handler): JsonResponse
  94. {
  95. return $this->handleRequest($request, $handler);
  96. }
  97. /**
  98. * 获取开发者充值账户余额
  99. *
  100. * @param Request $request
  101. * @param DiamondRechargeHandler $handler
  102. * @return JsonResponse
  103. */
  104. #[Middleware('openapi.scope:FUND_READ')]
  105. public function getRechargeAccountBalance(Request $request, DiamondRechargeHandler $handler): JsonResponse
  106. {
  107. return $handler->getRechargeAccountBalance($request->all(), [
  108. 'app' => $request->attributes->get('openapi_app'),
  109. 'user_id' => $request->attributes->get('user_id', 0),
  110. 'ip' => $request->ip(),
  111. 'user_agent' => $request->userAgent(),
  112. 'request_id' => $request->header('X-Request-ID', uniqid()),
  113. ]);
  114. }
  115. /**
  116. * 获取开发者提取账户余额
  117. *
  118. * @param Request $request
  119. * @param DiamondWithdrawHandler $handler
  120. * @return JsonResponse
  121. */
  122. #[Middleware('openapi.scope:FUND_READ')]
  123. public function getWithdrawAccountBalance(Request $request, DiamondWithdrawHandler $handler): JsonResponse
  124. {
  125. return $handler->getWithdrawAccountBalance($request->all(), [
  126. 'app' => $request->attributes->get('openapi_app'),
  127. 'user_id' => $request->attributes->get('user_id', 0),
  128. 'ip' => $request->ip(),
  129. 'user_agent' => $request->userAgent(),
  130. 'request_id' => $request->header('X-Request-ID', uniqid()),
  131. ]);
  132. }
  133. /**
  134. * 通用请求处理方法
  135. *
  136. * @param Request $request
  137. * @param HandlerInterface $handler
  138. * @return JsonResponse
  139. */
  140. protected function handleRequest(Request $request, HandlerInterface $handler): JsonResponse
  141. {
  142. try {
  143. // 准备请求数据
  144. $data = array_merge(
  145. $request->all(),
  146. $request->route()->parameters()
  147. );
  148. // 准备上下文信息
  149. $context = [
  150. 'app' => $request->attributes->get('openapi_app'),
  151. 'user_id' => $request->attributes->get('user_id', 0),
  152. 'ip' => $request->ip(),
  153. 'user_agent' => $request->userAgent(),
  154. 'request_id' => $request->header('X-Request-ID', uniqid()),
  155. ];
  156. // 调用Handler处理请求
  157. return $handler->handle($data, $context);
  158. } catch (\Exception $e) {
  159. return response()->json([
  160. 'success' => false,
  161. 'message' => '请求处理失败',
  162. 'error' => $e->getMessage(),
  163. ], 500);
  164. }
  165. }
  166. }