- 在多个控制器中更新权限检查逻辑,确保管理员能够更灵活地管理代理和玩家。 - 在 AdminPlayerStoreController 中引入对玩家创建能力的验证,确保只有具备相应权限的管理员能够创建玩家。 - 更新请求验证逻辑,新增 credit_limit、rebate_rate 和 extra_rebate_rate 字段,以支持更细粒度的玩家管理。 - 在 AgentNodeProfileController 中添加对父代理能力授予的验证,确保子代理的权限在父代理范围内。 - 引入 AgentProfileFieldRules 以简化代理资料更新请求的规则定义,提升代码复用性。
66 lines
2.2 KiB
PHP
66 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Player;
|
|
|
|
use App\Models\AgentNode;
|
|
use App\Services\Agent\RebateLimitValidator;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
final class PlayerRebateProfileService
|
|
{
|
|
public function __construct(
|
|
private readonly RebateLimitValidator $rebateLimitValidator,
|
|
) {}
|
|
|
|
/**
|
|
* @param list<array{game_type: string, rebate_rate?: float, extra_rebate_rate?: float, inherit_from_agent?: bool}> $profiles
|
|
*/
|
|
public function syncProfiles(int $playerId, AgentNode $agent, array $profiles): void
|
|
{
|
|
if ($profiles === []) {
|
|
return;
|
|
}
|
|
|
|
$now = now();
|
|
foreach ($profiles as $row) {
|
|
$gameType = trim((string) ($row['game_type'] ?? '*')) ?: '*';
|
|
$inherit = (bool) ($row['inherit_from_agent'] ?? false);
|
|
$rebateRate = (float) ($row['rebate_rate'] ?? 0);
|
|
$extraRate = (float) ($row['extra_rebate_rate'] ?? 0);
|
|
|
|
if (! $inherit) {
|
|
$this->rebateLimitValidator->assertPlayerRebateWithinAgent($agent, $rebateRate, $extraRate);
|
|
}
|
|
|
|
DB::table('player_rebate_profiles')->updateOrInsert(
|
|
['player_id' => $playerId, 'game_type' => $gameType],
|
|
[
|
|
'inherit_from_agent' => $inherit,
|
|
'rebate_rate' => $inherit ? 0 : $rebateRate,
|
|
'extra_rebate_rate' => $inherit ? 0 : $extraRate,
|
|
'updated_at' => $now,
|
|
'created_at' => $now,
|
|
],
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return list<array{game_type: string, rebate_rate: float, extra_rebate_rate: float, inherit_from_agent: bool}>
|
|
*/
|
|
public function listForPlayer(int $playerId): array
|
|
{
|
|
return DB::table('player_rebate_profiles')
|
|
->where('player_id', $playerId)
|
|
->orderBy('game_type')
|
|
->get()
|
|
->map(static fn (object $row): array => [
|
|
'game_type' => (string) $row->game_type,
|
|
'rebate_rate' => (float) $row->rebate_rate,
|
|
'extra_rebate_rate' => (float) $row->extra_rebate_rate,
|
|
'inherit_from_agent' => (bool) $row->inherit_from_agent,
|
|
])
|
|
->all();
|
|
}
|
|
}
|