diff --git a/app/controllers/discourse_donations/charges_controller.rb b/app/controllers/discourse_donations/charges_controller.rb index c6e6962..8cb9f90 100644 --- a/app/controllers/discourse_donations/charges_controller.rb +++ b/app/controllers/discourse_donations/charges_controller.rb @@ -14,11 +14,24 @@ module DiscourseDonations response = {} end + if reward_user?(payment) + reward = DiscourseDonations::Rewards.new(current_user) + reward.add_to_group(SiteSetting.discourse_donations_reward_group) if add_to_group? + end + render :json => response end private + def reward_user?(payment) + payment.present? && payment.successful? && current_user.present? + end + + def add_to_group? + SiteSetting.discourse_donations_reward_group.present? + end + def secret_key SiteSetting.discourse_donations_secret_key end diff --git a/app/services/discourse_donations/rewards.rb b/app/services/discourse_donations/rewards.rb new file mode 100644 index 0000000..8e73448 --- /dev/null +++ b/app/services/discourse_donations/rewards.rb @@ -0,0 +1,14 @@ + + +module DiscourseDonations + class Rewards + def initialize(user) + @user = user + end + + def add_to_group(name) + group = ::Group.find_by_name(name) + group.add(@user) if group.present? + end + end +end diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 3ceec96..0209ebe 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -5,5 +5,5 @@ en: discourse_donations_public_key: Stripe Public Key discourse_donations_currency: Currency Code discourse_donations_hide_zip_code: Hide Zip Code - discourse_donations_grant_badge: Grant this badge to user when a payment is successful - discourse_donations_add_to_group: Add the user to this group when a payment is successful + discourse_donations_reward_badge: Grant this badge to user when a payment is successful + discourse_donations_reward_group: Add the user to this group when a payment is successful diff --git a/config/settings.yml b/config/settings.yml index 3bea51a..8051b6f 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -15,9 +15,9 @@ plugins: discourse_donations_hide_zip_code: default: true client: true - discourse_donations_grant_badge: + discourse_donations_reward_badge: client: false default: 'Donation' - discourse_donations_add_to_group: + discourse_donations_reward_group: client: false default: 'Donation' diff --git a/spec/services/discourse_donations/rewards_spec.rb b/spec/services/discourse_donations/rewards_spec.rb new file mode 100644 index 0000000..2155dc1 --- /dev/null +++ b/spec/services/discourse_donations/rewards_spec.rb @@ -0,0 +1,17 @@ +require 'rails_helper' + +module DiscourseDonations + RSpec.describe DiscourseDonations::Rewards do + let(:grp) { Fabricate(:group, name: 'w00t') } + let(:user) { Fabricate(:user) } + subject { described_class.new(user) } + + it 'adds the user to a group' do + Group.expects(:find_by_name).with(grp.name).returns(grp) + grp.expects(:add).with(user) + subject.add_to_group(grp.name) + end + + it 'grants the user a badge' + end +end