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'; } }