lotteryAdmin(); abort_if($admin === null, 401); if ($denied = AdminSiteScope::denyUnlessPlayerAccessible($admin, $player)) { return $denied; } $data = $request->validated(); if (isset($data['status'])) { $data['status'] = (int) $data['status']; } $agent = $player->agent_node_id !== null ? AgentNode::query()->find((int) $player->agent_node_id) : null; if ($agent !== null && $request->has('rebate_rate')) { $rebateLimitValidator->assertPlayerRebateWithinAgent( $agent, (float) $request->input('rebate_rate', 0), (float) $request->input('extra_rebate_rate', 0), ); } if ($request->has('credit_limit') && $agent !== null) { $newLimit = (int) $request->input('credit_limit', 0); $creditRow = DB::table('player_credit_accounts')->where('player_id', $player->id)->first(); $previous = (int) ($creditRow->credit_limit ?? 0); $usedCredit = (int) ($creditRow->used_credit ?? 0) + (int) ($creditRow->frozen_credit ?? 0); $agentProfileService->adjustPlayerCreditAllocation($agent, $previous, $newLimit, $usedCredit); $playerCreditService->upsertAccount($player, ['credit_limit' => $newLimit]); $agentProfileService->refreshAllocatedCredit($agent); unset($data['credit_limit']); } if ($request->has('rebate_rate')) { DB::table('player_rebate_profiles')->updateOrInsert( ['player_id' => $player->id, 'game_type' => '*'], [ 'inherit_from_agent' => false, 'rebate_rate' => (float) $request->input('rebate_rate', 0), 'extra_rebate_rate' => (float) $request->input('extra_rebate_rate', 0), 'updated_at' => now(), 'created_at' => now(), ], ); unset($data['rebate_rate'], $data['extra_rebate_rate']); } if ($request->has('rebate_profiles') && $agent !== null) { $rebateProfileService->syncProfiles($player->id, $agent, $request->input('rebate_profiles', [])); unset($data['rebate_profiles']); } if ($request->has('risk_tags')) { $player->risk_tags = array_values(array_unique(array_filter( array_map('strval', $request->input('risk_tags', [])), ))); unset($data['risk_tags']); } unset($data['rebate_profiles']); $player->fill(array_filter($data, static fn ($v) => $v !== '' && ! is_array($v))); $player->save(); return ApiResponse::success(PlayerApiPresenter::listItem($player)); } }