Class: RewardWorkers::UserReferralReward
- Inherits:
-
ApplicationWorker
- Object
- ApplicationWorker
- RewardWorkers::UserReferralReward
- 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
- #no_reward_referral_before?(user_id) ⇒ Boolean
- #perform(reservation_id) ⇒ Object
- #valid_referral?(reservation, user) ⇒ Boolean
Methods inherited from ApplicationWorker
Instance Method Details
#no_reward_referral_before?(user_id) ⇒ 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
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 |