| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Services\WorldCup\WorldCupReviewService;
- use Illuminate\Http\Request;
- class WorldCupReviewController extends BaseController
- {
- private $service;
- public function __construct(WorldCupReviewService $service)
- {
- $this->service = $service;
- }
- public function rewards(Request $request)
- {
- $filters = [
- 'status' => $request->input('status', 'reviewing'),
- 'risk' => $request->input('risk', ''),
- 'q' => $request->input('q', ''),
- 'limit' => (int)$request->input('limit', 100),
- ];
- if (!$this->wantsJson($request)) {
- return view('admin.world_cup.rewards', [
- 'filters' => $filters,
- 'kpi' => $this->service->kpi(),
- 'list' => $this->service->queue($filters),
- 'logs' => $this->service->auditLogs(30),
- ]);
- }
- return $this->json(200, 'success', [
- 'list' => $this->service->queue($filters),
- ]);
- }
- public function reward($rewardId)
- {
- $list = $this->service->queue([
- 'q' => (string)$rewardId,
- 'limit' => 1,
- ]);
- if (!$list) {
- return $this->json(404, 'Reward not found');
- }
- return $this->json(200, 'success', [
- 'reward' => $list[0],
- ]);
- }
- public function approve(Request $request, $rewardId)
- {
- return $this->responseResult($this->service->approve((int)$rewardId, $this->actor($request)));
- }
- public function reject(Request $request, $rewardId)
- {
- return $this->responseResult($this->service->reject(
- (int)$rewardId,
- $this->actor($request),
- (string)$request->input('reason_code', '')
- ));
- }
- public function hold(Request $request, $rewardId)
- {
- return $this->responseResult($this->service->hold((int)$rewardId, $this->actor($request)));
- }
- public function clawback(Request $request, $rewardId)
- {
- return $this->responseResult($this->service->clawback(
- (int)$rewardId,
- $this->actor($request),
- (string)$request->input('reason_code', ''),
- (bool)$request->input('ban_users', false)
- ));
- }
- public function batch(Request $request)
- {
- $ids = $request->input('reward_ids', []);
- if (!is_array($ids)) {
- $ids = [];
- }
- $action = (string)$request->input('action', '');
- if ($action === 'approve') {
- return $this->responseResult($this->service->batchApprove($ids, $this->actor($request)));
- }
- if ($action === 'reject') {
- return $this->responseResult($this->service->batchReject(
- $ids,
- $this->actor($request),
- (string)$request->input('reason_code', '')
- ));
- }
- return $this->json(400, 'Invalid batch action');
- }
- public function kpi(Request $request)
- {
- $kpi = $this->service->kpi();
- if (!$this->wantsJson($request)) {
- return view('admin.world_cup.kpi', [
- 'kpi' => $kpi,
- 'highRiskList' => $this->service->queue([
- 'status' => 'reviewing',
- 'risk' => 'high',
- 'q' => '',
- 'limit' => 20,
- ]),
- 'reviewingList' => $this->service->queue([
- 'status' => 'reviewing',
- 'risk' => '',
- 'q' => '',
- 'limit' => 10,
- ]),
- 'logs' => $this->service->auditLogs(20),
- ]);
- }
- return $this->json(200, 'success', $kpi);
- }
- public function logs(Request $request)
- {
- $filters = [
- 'reward_id' => $request->input('reward_id', ''),
- 'actor' => $request->input('actor', ''),
- 'action' => $request->input('action', ''),
- 'limit' => (int)$request->input('limit', 100),
- ];
- if (!$this->wantsJson($request)) {
- return view('admin.world_cup.logs', [
- 'filters' => $filters,
- 'logs' => $this->service->auditLogs($filters),
- ]);
- }
- return $this->json(200, 'success', [
- 'list' => $this->service->auditLogs($filters),
- ]);
- }
- private function actor(Request $request): string
- {
- return (string)($request->session()->get('admin.username') ?: 'admin');
- }
- private function responseResult(array $result)
- {
- if (!$result['success']) {
- return $this->json(400, $result['message']);
- }
- return $this->json(200, 'success', $result['data']);
- }
- private function wantsJson(Request $request): bool
- {
- return $request->ajax()
- || $request->expectsJson()
- || $request->input('format') === 'json';
- }
- }
|