where('currency_code', $currency) ->where('status', 1) ->lockForUpdate() ->first(); if ($pool === null) { return; } $betAmount = (int) $item->total_bet_amount; if ($betAmount < (int) $pool->min_bet_amount) { return; } $rate = (float) $pool->contribution_rate; $contrib = (int) floor($betAmount * $rate); if ($contrib <= 0) { return; } $existing = JackpotContribution::query() ->where('ticket_item_id', $item->id) ->first(); if ($existing !== null) { return; } JackpotContribution::query()->create([ 'jackpot_pool_id' => $pool->id, 'draw_id' => $draw->id, 'player_id' => $item->player_id, 'ticket_item_id' => $item->id, 'contribution_amount' => $contrib, 'currency_code' => $currency, ]); $pool->forceFill([ 'current_amount' => (int) $pool->current_amount + $contrib, ])->save(); } }