where('agent_node_id', $parent->id)->first(); if ($profile === null) { return; } $available = max(0, (int) $profile->credit_limit - (int) $profile->allocated_credit); if ($additionalCredit > $available) { throw ValidationException::withMessages([ 'credit_limit' => ['exceeds_available'], ]); } } public function assertPlayerCreditWithinAgent(AgentNode $agent, int $playerCreditLimit): void { $profile = AgentProfile::query()->where('agent_node_id', $agent->id)->first(); if ($profile === null) { return; } if ($playerCreditLimit < 0) { throw ValidationException::withMessages([ 'credit_limit' => ['invalid'], ]); } } }