Files
Dena/app/jobs/cron/referral_bonus.rb
2026-08-13 19:50:53 +03:30

38 lines
1.6 KiB
Ruby

module Jobs
module Cron
class ReferralBonus
def self.process
irt_currency = Currency.find('irt')
Operations::Revenue.h24.where(reference_type: 'Trade').find_in_batches(batch_size: 1000).each do |group|
group.each do |revenue|
referral_user = revenue.member.referral_user
next unless referral_user.present?
next unless revenue.credit.positive?
referral_account = referral_user.get_account('irt')
referral_account.lock!
trade = Trade.find(revenue.reference_id)
referral_bonus = if revenue.currency_id.in? %w[irt usdt]
revenue.credit * ENV.fetch('REFERRAL_FEE').to_d * trade.irt_price
else
(revenue.credit * ENV.fetch('REFERRAL_FEE').to_d) * (trade.price * trade.irt_price)
end
begin
ActiveRecord::Base.transaction do
referral_account.balance += referral_bonus
referral_account.save!
bonus = Bonus.create(trade: trade, sender_member: revenue.member, bonus_member: referral_user, amount: referral_bonus, state: 'payed')
Operations::Revenue.debit!(amount: referral_bonus, member_id: referral_user, currency: irt_currency, reference_type: 'bonus', reference_id: bonus.id)
end
rescue StandardError
Bonus.create(trade: trade, sender_member: revenue.member, bonus_member: referral_user, amount: referral_bonus, state: 'pending')
end
end
end
sleep 86400
end
end
end
end