betService = $betService; $this->referralService = $referralService; $this->favoriteService = $favoriteService; $this->referralRewardService = $referralRewardService; $this->oddsService = $oddsService; } public function info(Request $request) { $user = $request->user(); if (!$user) { return apiReturnFail(['web.activity.login_required', 'Please login first']); } $balance = $this->getUserBalance((int)$user->UserID); $firstBetUsed = $this->isFirstBetUsed((int)$user->UserID); $inviteState = $this->referralRewardService->getInviteState((int)$user->UserID); return apiReturnSuc([ 'invite_code' => $inviteState['invite_code'], 'referral_bound' => $inviteState['referral_bound'], 'referred_by_user_id' => $inviteState['referred_by_user_id'], 'invite_copy' => $this->referralService->getInviteCopy(), 'bet_panel' => $this->betService->buildBetPanelState($balance, $firstBetUsed), 'first_bet_used' => $firstBetUsed, 'limits' => [ 'min_stake' => WorldCupBetService::MIN_STAKE, 'first_stake_cap' => WorldCupBetService::FIRST_STAKE_CAP, 'max_stake' => WorldCupBetService::MAX_STAKE, 'referral_cap_each' => WorldCupReferralService::REFERRAL_CAP, ], 'register_timestmap' => strtotime($user->RegisterDate), 'server_time' => time(), ]); } public function bindInvite(Request $request) { $user = $request->user(); if (!$user) { return apiReturnFail(['web.activity.login_required', 'Please login first']); } $result = $this->referralRewardService->bindInvite( (int)$user->UserID, (string)$request->input('invite_code', ''), (string)$request->input('bind_type', 'manual') ); if (!$result['success']) { return apiReturnFail($result['message']); } return apiReturnSuc([ 'status' => $result['status'], 'referral' => $result['data'], ]); } public function inviteLog(Request $request) { $user = $request->user(); if (!$user) { return apiReturnFail(['web.activity.login_required', 'Please login first']); } return apiReturnSuc($this->referralRewardService->inviteLog( (int)$user->UserID, (string)$request->input('type', 'invited'), (int)$request->input('limit', 20) )); } public function rewardLog(Request $request) { $user = $request->user(); if (!$user) { return apiReturnFail(['web.activity.login_required', 'Please login first']); } return apiReturnSuc($this->referralRewardService->rewardLog( (int)$user->UserID, (int)$request->input('limit', 20) )); } public function matches(Request $request) { $user = $request->user(); if (!$user) { return apiReturnFail(['web.activity.login_required', 'Please login first']); } $favoriteOnly = (int)$request->input('favorite', 0) === 1; return apiReturnSuc([ 'matches' => $this->favoriteService->listMatches((int)$user->UserID, $favoriteOnly), ]); } public function toggleFavorite(Request $request, $matchId) { $user = $request->user(); if (!$user) { return apiReturnFail(['web.activity.login_required', 'Please login first']); } $result = $this->favoriteService->toggleFavorite((int)$user->UserID, (int)$matchId); if (!$result['success']) { return apiReturnFail($result['message']); } return apiReturnSuc([ 'match_id' => (int)$matchId, 'is_favorite' => $result['is_favorite'], ]); } public function betPanelState(Request $request) { $user = $request->user(); if (!$user) { return apiReturnFail(['web.activity.login_required', 'Please login first']); } $balance = $this->getUserBalance((int)$user->UserID); $firstBetUsed = $this->isFirstBetUsed((int)$user->UserID); return apiReturnSuc($this->betService->buildBetPanelState($balance, $firstBetUsed)); } public function betLog(Request $request) { $user = $request->user(); if (!$user) { return apiReturnFail(['web.activity.login_required', 'Please login first']); } return apiReturnSuc($this->betService->betLog( (int)$user->UserID, (string)$request->input('status', 'all'), (int)$request->input('limit', 20) )); } public function placeBet(Request $request) { $user = $request->user(); if (!$user) { return apiReturnFail(['web.activity.login_required', 'Please login first']); } $result = $this->betService->placeBet([ 'user_id' => (int)$user->UserID, 'game_id' => (int)($user->GameID ?? 0), 'market' => (string)$request->input('market', '1x2'), 'match_id' => $request->input('match_id'), 'selection' => (string)$request->input('selection', ''), 'stake' => (int)$request->input('stake', 0), 'idempotency_key' => (string)$request->input('idempotency_key', ''), ]); if (!$result['success']) { return apiReturnFail($result['message']); } return apiReturnSuc([ 'status' => $result['status'], 'bet' => $result['data'], ]); } public function winnerMarkets(Request $request) { $user = $request->user(); if (!$user) { return apiReturnFail(['web.activity.login_required', 'Please login first']); } return apiReturnSuc([ 'markets' => $this->oddsService->winnerOdds(), ]); } private function getUserBalance(int $userId): int { return (int)DB::connection('read')->table('QPTreasureDB.dbo.GameScoreInfo') ->where('UserID', $userId) ->value('Score'); } private function isFirstBetUsed(int $userId): bool { return DB::connection('read')->table('agent.dbo.world_cup_user_state') ->where('user_id', $userId) ->where('first_bet_used', 1) ->exists(); } }