refactor:拆分 API 路由与请求校验,统一 final 类和代码风格
This commit is contained in:
68
app/Support/CurrencyResolver.php
Normal file
68
app/Support/CurrencyResolver.php
Normal file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Support;
|
||||
|
||||
use App\Models\Player;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
/**
|
||||
* 币种码解析工具。
|
||||
*
|
||||
* 统一处理 Query/Body 中的 currency 参数,支持回退到玩家默认币种或全局配置。
|
||||
*/
|
||||
final class CurrencyResolver
|
||||
{
|
||||
/**
|
||||
* 从请求或玩家/配置回退解析币种码。
|
||||
*
|
||||
* @param Request $request 请求对象
|
||||
* @param Player|null $player 玩家对象(用于回退)
|
||||
* @param string $key 参数名(默认 currency)
|
||||
* @param string|null $default 默认币种码(不传则使用 player->default_currency 或 config)
|
||||
*/
|
||||
public static function resolve(
|
||||
Request $request,
|
||||
?Player $player = null,
|
||||
string $key = 'currency',
|
||||
?string $default = null,
|
||||
): string {
|
||||
$raw = $request->input($key) ?? $request->query($key);
|
||||
|
||||
if (is_string($raw) && $raw !== '') {
|
||||
$code = strtoupper(substr(trim($raw), 0, 16));
|
||||
} else {
|
||||
$fallback = $default
|
||||
?? $player?->default_currency
|
||||
?? config('lottery.default_currency', 'NPR');
|
||||
$code = strtoupper(substr(trim((string) $fallback), 0, 16));
|
||||
}
|
||||
|
||||
return $code;
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证币种码格式是否合法。
|
||||
*
|
||||
* 合法格式:1-16 位字母数字,全大写。
|
||||
*/
|
||||
public static function isValid(string $code): bool
|
||||
{
|
||||
return preg_match('/^[A-Z0-9]{1,16}$/', $code) === 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析并验证币种码,无效时返回 null。
|
||||
*/
|
||||
public static function resolveOrNull(
|
||||
Request $request,
|
||||
?Player $player = null,
|
||||
string $key = 'currency',
|
||||
?string $default = null,
|
||||
): ?string {
|
||||
$code = self::resolve($request, $player, $key, $default);
|
||||
|
||||
return self::isValid($code) ? $code : null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user