1.优化getPlayerInfo接口

This commit is contained in:
2026-05-13 10:15:49 +08:00
parent 6a1fd639a4
commit 52b5ccb8e4
4 changed files with 85 additions and 7 deletions

View File

@@ -44,6 +44,14 @@ class GameController extends BaseController
'sort',
];
/** getPlayerInfo 仅查询需返回的列,减轻 IO敏感/内部字段不入库查询) */
private const PLAYER_INFO_DB_FIELDS = [
'id', 'username', 'phone', 'uid', 'name', 'status', 'coin', 'is_up', 'admin_id',
'total_ticket_count', 'paid_ticket_count', 'free_ticket_count', 'free_ticket',
'total_win_coin',
'create_time', 'update_time',
];
/**
* 获取游戏列表
* POST 参数lang可选zh/en默认 zh
@@ -130,24 +138,31 @@ class GameController extends BaseController
/**
* 获取用户信息
* POST 参数username
* 返回 DicePlayer 中非敏感信息
* 参数usernamePOST JSON / 表单 / Query 均可input 合并读取降低偶发空参)
* 返回 DicePlayer 中非敏感信息;短期 Redis 快照 + 窄字段查询降低延迟
*/
public function getPlayerInfo(Request $request): Response
{
$username = trim((string) ($request->post('username', '')));
$usernameRaw = $request->input('username', '');
$username = is_string($usernameRaw) ? trim($usernameRaw) : '';
if ($username === '') {
return $this->fail('username is required', ReturnCode::PARAMS_ERROR);
}
$player = DicePlayer::where('username', $username)->find();
$cached = UserCache::getPlayerInfoSnapshotByUsername($username);
if ($cached !== null) {
return $this->success($cached);
}
$player = DicePlayer::field(self::PLAYER_INFO_DB_FIELDS)->where('username', $username)->find();
if (!$player) {
return $this->fail('User not found', ReturnCode::NOT_FOUND);
}
$hidden = ['password', 'lottery_config_id', 't1_weight', 't2_weight', 't3_weight', 't4_weight', 't5_weight', 'delete_time'];
$info = $player->hidden($hidden)->toArray();
UserCache::setPlayerInfoSnapshotByUsername($username, $info);
return $this->success($info);
}