$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 */ 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(); } }