refactor:拆分 API 路由与请求校验,统一 final 类和代码风格
This commit is contained in:
@@ -2,13 +2,14 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Wallet;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Models\Player;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Models\PlayerWallet;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Support\CurrencyResolver;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
/**
|
||||
* 【玩家】查询彩票侧钱包余额。
|
||||
@@ -22,7 +23,7 @@ use Illuminate\Http\Request;
|
||||
* - `available_balance`:`balance - frozen_balance`,表示当前可用于下注的整数最小货币单位(不为负)
|
||||
* - `main_balance`:主站钱包余额占位,接入主站 API 后再返回实数;当前固定 `null`
|
||||
*/
|
||||
class WalletBalanceController extends Controller
|
||||
final class WalletBalanceController extends Controller
|
||||
{
|
||||
private const WALLET_TYPE_LOTTERY = 'lottery';
|
||||
|
||||
@@ -68,16 +69,9 @@ class WalletBalanceController extends Controller
|
||||
*/
|
||||
private function resolveCurrencyCode(Request $request, Player $player): string|JsonResponse
|
||||
{
|
||||
$raw = $request->query('currency');
|
||||
if (is_string($raw) && $raw !== '') {
|
||||
$code = strtoupper(substr(trim($raw), 0, 16));
|
||||
} else {
|
||||
$fallback = $player->default_currency ?? config('lottery.default_currency', 'NPR');
|
||||
$code = strtoupper(substr(trim((string) $fallback), 0, 16));
|
||||
}
|
||||
$code = CurrencyResolver::resolve($request, $player, 'currency');
|
||||
|
||||
// 币种码:字母数字,长度 1–16,与 migrations 字段一致
|
||||
if (! preg_match('/^[A-Z0-9]{1,16}$/', $code)) {
|
||||
if (! CurrencyResolver::isValid($code)) {
|
||||
return ApiResponse::error(
|
||||
__('wallet.invalid_currency'),
|
||||
ErrorCode::WalletInvalidCurrency->value,
|
||||
|
||||
@@ -2,21 +2,24 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Wallet;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\TransferOrder;
|
||||
use App\Models\WalletTxn;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Str;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\TransferOrder;
|
||||
use App\Support\PaginationTrait;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
/**
|
||||
* PRD §10.1.1:`GET /api/v1/wallet/logs` — 钱包流水。
|
||||
*
|
||||
* Query:`page`、`size`(每页条数,默认 20)、`type`(逗号分隔:transfer_in,transfer_out,bet,prize,refund)
|
||||
*/
|
||||
class WalletLogsController extends Controller
|
||||
final class WalletLogsController extends Controller
|
||||
{
|
||||
use PaginationTrait;
|
||||
|
||||
/** PRD 对外类型 → 本地 biz_type */
|
||||
private const TYPE_TO_BIZ = [
|
||||
'transfer_in' => ['transfer_in'],
|
||||
@@ -31,8 +34,8 @@ class WalletLogsController extends Controller
|
||||
$player = $request->lotteryPlayer();
|
||||
abort_if($player === null, 500, 'lottery_player missing');
|
||||
|
||||
$perPage = min(100, max(1, (int) $request->query('size', $request->query('per_page', 20))));
|
||||
$page = max(1, (int) $request->query('page', 1));
|
||||
$perPage = $this->perPage($request, 'size', 20, 100);
|
||||
$page = $this->page($request);
|
||||
|
||||
$pendingPayload = $this->pendingReconcilePayload((int) $player->id);
|
||||
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Wallet;
|
||||
|
||||
use App\Exceptions\WalletOperationException;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Wallet\WalletTransferRequest;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Models\Player;
|
||||
use App\Services\Wallet\LotteryTransferService;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Support\ApiResponse;
|
||||
use App\Support\LotteryMessage;
|
||||
use App\Support\CurrencyResolver;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Exceptions\WalletOperationException;
|
||||
use App\Services\Wallet\LotteryTransferService;
|
||||
use App\Http\Requests\Wallet\WalletTransferRequest;
|
||||
|
||||
/**
|
||||
* 转入:主站扣款 → 彩票钱包加款。
|
||||
*
|
||||
* `POST /api/v1/wallet/transfer-in` ,body JSON:`amount`(最小货币单位整数), `idempotent_key`, `currency`(可选)
|
||||
*/
|
||||
class WalletTransferInController extends Controller
|
||||
final class WalletTransferInController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private readonly LotteryTransferService $transferService,
|
||||
@@ -53,17 +53,11 @@ class WalletTransferInController extends Controller
|
||||
return ApiResponse::success($data);
|
||||
}
|
||||
|
||||
private function resolveCurrencyCode(Request $request, Player $player): string|JsonResponse
|
||||
private function resolveCurrencyCode(WalletTransferRequest $request, Player $player): string|JsonResponse
|
||||
{
|
||||
$raw = $request->input('currency');
|
||||
if (is_string($raw) && $raw !== '') {
|
||||
$code = strtoupper(substr(trim($raw), 0, 16));
|
||||
} else {
|
||||
$fallback = $player->default_currency ?? config('lottery.default_currency', 'NPR');
|
||||
$code = strtoupper(substr(trim((string) $fallback), 0, 16));
|
||||
}
|
||||
$code = CurrencyResolver::resolve($request, $player, 'currency');
|
||||
|
||||
if (! preg_match('/^[A-Z0-9]{1,16}$/', $code)) {
|
||||
if (! CurrencyResolver::isValid($code)) {
|
||||
return ApiResponse::error(
|
||||
__('wallet.invalid_currency'),
|
||||
ErrorCode::WalletInvalidCurrency->value,
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Wallet;
|
||||
|
||||
use App\Exceptions\WalletOperationException;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Wallet\WalletTransferRequest;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Models\Player;
|
||||
use App\Services\Wallet\LotteryTransferService;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Support\ApiResponse;
|
||||
use App\Support\LotteryMessage;
|
||||
use App\Support\CurrencyResolver;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Exceptions\WalletOperationException;
|
||||
use App\Services\Wallet\LotteryTransferService;
|
||||
use App\Http\Requests\Wallet\WalletTransferRequest;
|
||||
|
||||
/**
|
||||
* 转出:彩票钱包扣款 → 主站加款;主站失败则冲正彩票余额。
|
||||
*
|
||||
* `POST /api/v1/wallet/transfer-out`
|
||||
*/
|
||||
class WalletTransferOutController extends Controller
|
||||
final class WalletTransferOutController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private readonly LotteryTransferService $transferService,
|
||||
@@ -53,17 +53,11 @@ class WalletTransferOutController extends Controller
|
||||
return ApiResponse::success($data);
|
||||
}
|
||||
|
||||
private function resolveCurrencyCode(Request $request, Player $player): string|JsonResponse
|
||||
private function resolveCurrencyCode(WalletTransferRequest $request, Player $player): string|JsonResponse
|
||||
{
|
||||
$raw = $request->input('currency');
|
||||
if (is_string($raw) && $raw !== '') {
|
||||
$code = strtoupper(substr(trim($raw), 0, 16));
|
||||
} else {
|
||||
$fallback = $player->default_currency ?? config('lottery.default_currency', 'NPR');
|
||||
$code = strtoupper(substr(trim((string) $fallback), 0, 16));
|
||||
}
|
||||
$code = CurrencyResolver::resolve($request, $player, 'currency');
|
||||
|
||||
if (! preg_match('/^[A-Z0-9]{1,16}$/', $code)) {
|
||||
if (! CurrencyResolver::isValid($code)) {
|
||||
return ApiResponse::error(
|
||||
__('wallet.invalid_currency'),
|
||||
ErrorCode::WalletInvalidCurrency->value,
|
||||
|
||||
Reference in New Issue
Block a user