| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- <?php
- namespace App\Http\Controllers\Game;
- use App\Http\Controllers\Controller;
- use App\Services\WorldCup\WorldCupBetService;
- use App\Services\WorldCup\WorldCupMatchFavoriteService;
- use App\Services\WorldCup\WorldCupOddsService;
- use App\Services\WorldCup\WorldCupReferralRewardService;
- use App\Services\WorldCup\WorldCupReferralService;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- class WorldCupActivityController extends Controller
- {
- private $betService;
- private $favoriteService;
- private $referralService;
- private $referralRewardService;
- private $oddsService;
- public function __construct(
- WorldCupBetService $betService,
- WorldCupReferralService $referralService,
- WorldCupMatchFavoriteService $favoriteService,
- WorldCupReferralRewardService $referralRewardService,
- WorldCupOddsService $oddsService
- ) {
- $this->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();
- }
- }
|