Class: Achievements::AwardService

Inherits:
Object
  • Object
show all
Defined in:
app/services/achievements/award_service.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(current_user, achievement_id, recipient_id) ⇒ AwardService

Returns a new instance of AwardService.



7
8
9
10
11
# File 'app/services/achievements/award_service.rb', line 7

def initialize(current_user, achievement_id, recipient_id)
  @current_user = current_user
  @achievement_id = achievement_id
  @recipient_id = recipient_id
end

Instance Attribute Details

#achievement_idObject (readonly)

Returns the value of attribute achievement_id.



5
6
7
# File 'app/services/achievements/award_service.rb', line 5

def achievement_id
  @achievement_id
end

#current_userObject (readonly)

Returns the value of attribute current_user.



5
6
7
# File 'app/services/achievements/award_service.rb', line 5

def current_user
  @current_user
end

#recipient_idObject (readonly)

Returns the value of attribute recipient_id.



5
6
7
# File 'app/services/achievements/award_service.rb', line 5

def recipient_id
  @recipient_id
end

Instance Method Details

#executeObject



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/services/achievements/award_service.rb', line 13

def execute
  achievement = Achievements::Achievement.find(achievement_id)
  return error_no_permissions unless allowed?(achievement)

  recipient = User.find(recipient_id)

  user_achievement = Achievements::UserAchievement.create(
    achievement: achievement,
    user: recipient,
    awarded_by_user: current_user)
  return error_awarding(user_achievement) unless user_achievement.persisted?

  NotificationService.new.new_achievement_email(recipient, achievement).deliver_later
  ServiceResponse.success(payload: user_achievement)
rescue ActiveRecord::RecordNotFound => e
  error(e.message)
end