lotteryPlayer(); abort_if($player === null, 500, 'lottery_player missing'); $currencyCode = $this->resolveCurrencyCode($request, $player); if ($currencyCode instanceof JsonResponse) { return $currencyCode; } $wallet = PlayerWallet::query()->firstOrCreate( [ 'player_id' => $player->id, 'wallet_type' => self::WALLET_TYPE_LOTTERY, 'currency_code' => $currencyCode, ], [ 'balance' => 0, 'frozen_balance' => 0, 'status' => 0, 'version' => 0, ], ); $balance = (int) $wallet->balance; $frozen = (int) $wallet->frozen_balance; return ApiResponse::success([ 'balance' => $balance, 'available_balance' => max(0, $balance - $frozen), 'main_balance' => null, 'currency_code' => $wallet->currency_code, 'wallet_type' => $wallet->wallet_type, 'frozen_balance' => $frozen, ]); } /** * @return string|JsonResponse 合法币种码或错误响应({@see ErrorCode::WalletInvalidCurrency}) */ private function resolveCurrencyCode(Request $request, Player $player): string|JsonResponse { $code = CurrencyResolver::resolve($request, $player, 'currency'); if (! CurrencyResolver::isValid($code)) { return ApiResponse::error( __('wallet.invalid_currency'), ErrorCode::WalletInvalidCurrency->value, null, 400, ); } return $code; } }