WorldCupReviewController.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Services\WorldCup\WorldCupReviewService;
  4. use Illuminate\Http\Request;
  5. class WorldCupReviewController extends BaseController
  6. {
  7. private $service;
  8. public function __construct(WorldCupReviewService $service)
  9. {
  10. $this->service = $service;
  11. }
  12. public function rewards(Request $request)
  13. {
  14. $filters = [
  15. 'status' => $request->input('status', 'reviewing'),
  16. 'risk' => $request->input('risk', ''),
  17. 'q' => $request->input('q', ''),
  18. 'limit' => (int)$request->input('limit', 100),
  19. ];
  20. if (!$this->wantsJson($request)) {
  21. return view('admin.world_cup.rewards', [
  22. 'filters' => $filters,
  23. 'kpi' => $this->service->kpi(),
  24. 'list' => $this->service->queue($filters),
  25. 'logs' => $this->service->auditLogs(30),
  26. ]);
  27. }
  28. return $this->json(200, 'success', [
  29. 'list' => $this->service->queue($filters),
  30. ]);
  31. }
  32. public function reward($rewardId)
  33. {
  34. $list = $this->service->queue([
  35. 'q' => (string)$rewardId,
  36. 'limit' => 1,
  37. ]);
  38. if (!$list) {
  39. return $this->json(404, 'Reward not found');
  40. }
  41. return $this->json(200, 'success', [
  42. 'reward' => $list[0],
  43. ]);
  44. }
  45. public function approve(Request $request, $rewardId)
  46. {
  47. return $this->responseResult($this->service->approve((int)$rewardId, $this->actor($request)));
  48. }
  49. public function reject(Request $request, $rewardId)
  50. {
  51. return $this->responseResult($this->service->reject(
  52. (int)$rewardId,
  53. $this->actor($request),
  54. (string)$request->input('reason_code', '')
  55. ));
  56. }
  57. public function hold(Request $request, $rewardId)
  58. {
  59. return $this->responseResult($this->service->hold((int)$rewardId, $this->actor($request)));
  60. }
  61. public function clawback(Request $request, $rewardId)
  62. {
  63. return $this->responseResult($this->service->clawback(
  64. (int)$rewardId,
  65. $this->actor($request),
  66. (string)$request->input('reason_code', ''),
  67. (bool)$request->input('ban_users', false)
  68. ));
  69. }
  70. public function batch(Request $request)
  71. {
  72. $ids = $request->input('reward_ids', []);
  73. if (!is_array($ids)) {
  74. $ids = [];
  75. }
  76. $action = (string)$request->input('action', '');
  77. if ($action === 'approve') {
  78. return $this->responseResult($this->service->batchApprove($ids, $this->actor($request)));
  79. }
  80. if ($action === 'reject') {
  81. return $this->responseResult($this->service->batchReject(
  82. $ids,
  83. $this->actor($request),
  84. (string)$request->input('reason_code', '')
  85. ));
  86. }
  87. return $this->json(400, 'Invalid batch action');
  88. }
  89. public function kpi(Request $request)
  90. {
  91. $kpi = $this->service->kpi();
  92. if (!$this->wantsJson($request)) {
  93. return view('admin.world_cup.kpi', [
  94. 'kpi' => $kpi,
  95. 'highRiskList' => $this->service->queue([
  96. 'status' => 'reviewing',
  97. 'risk' => 'high',
  98. 'q' => '',
  99. 'limit' => 20,
  100. ]),
  101. 'reviewingList' => $this->service->queue([
  102. 'status' => 'reviewing',
  103. 'risk' => '',
  104. 'q' => '',
  105. 'limit' => 10,
  106. ]),
  107. 'logs' => $this->service->auditLogs(20),
  108. ]);
  109. }
  110. return $this->json(200, 'success', $kpi);
  111. }
  112. public function logs(Request $request)
  113. {
  114. $filters = [
  115. 'reward_id' => $request->input('reward_id', ''),
  116. 'actor' => $request->input('actor', ''),
  117. 'action' => $request->input('action', ''),
  118. 'limit' => (int)$request->input('limit', 100),
  119. ];
  120. if (!$this->wantsJson($request)) {
  121. return view('admin.world_cup.logs', [
  122. 'filters' => $filters,
  123. 'logs' => $this->service->auditLogs($filters),
  124. ]);
  125. }
  126. return $this->json(200, 'success', [
  127. 'list' => $this->service->auditLogs($filters),
  128. ]);
  129. }
  130. private function actor(Request $request): string
  131. {
  132. return (string)($request->session()->get('admin.username') ?: 'admin');
  133. }
  134. private function responseResult(array $result)
  135. {
  136. if (!$result['success']) {
  137. return $this->json(400, $result['message']);
  138. }
  139. return $this->json(200, 'success', $result['data']);
  140. }
  141. private function wantsJson(Request $request): bool
  142. {
  143. return $request->ajax()
  144. || $request->expectsJson()
  145. || $request->input('format') === 'json';
  146. }
  147. }