Class: RewardWorkers::UserReferralReward

Inherits:
ApplicationWorker show all
Includes:
LoyaltyProgram::Benefits::ReferralPoints
Defined in:
app/workers/reward_workers/user_referral_reward.rb

Overview

typed: ignore Give reward to user because refer a friend

Instance Method Summary collapse

Methods inherited from ApplicationWorker

unlimited_retry

Instance Method Details

#no_reward_referral_before?(user_id) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
36
37
# File 'app/workers/reward_workers/user_referral_reward.rb', line 33

def no_reward_referral_before?(user_id)
  reward = Reward.where(user_id: user_id, reward_type: 'referral').
    where('points_total > 0 AND points_pending = 0')
  reward.blank?
end

#perform(reservation_id) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/workers/reward_workers/user_referral_reward.rb', line 6

def perform(reservation_id)
  reservation = Reservation.fetch reservation_id
  return unless reservation.user_id.present? && reservation.reached_goal?

  # skip if restaurant is not eligible for rewards
  return unless reservation.restaurant.eligible_for_rewards?

  user = reservation.fetch_user
  return unless valid_referral?(reservation, user)

  restaurant = reservation.restaurant
  description = "Referral campaign: referrer active first booking (friend id = #{reservation.user_id})"
  ::Reward.create!(user_id: user.referrer.id,
                   points_total: referral_points(user.referrer, restaurant.country.alpha3),
                   points_pending: 0,
                   redeemed: false,
                   reward_type: 'referrer',
                   description: description,
                   country_id: restaurant.country_id)
end

#valid_referral?(reservation, user) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
30
31
# File 'app/workers/reward_workers/user_referral_reward.rb', line 27

def valid_referral?(reservation, user)
  return false if user.blank?

  no_reward_referral_before?(user.id) && user.referrer.present? && reservation.reached_goal?
end