Class: Coupon::ApplyCoupon
- Inherits:
-
Object
- Object
- Coupon::ApplyCoupon
- Defined in:
- app/services/coupon/apply_coupon.rb
Defined Under Namespace
Classes: Result
Instance Method Summary collapse
Instance Method Details
#perform(itemizable, discount_params) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'app/services/coupon/apply_coupon.rb', line 7 def perform(itemizable, discount_params) lock_key = "#{itemizable.class.name.downcase}_#{itemizable.id}".freeze errors = [] itemizable.with_advisory_lock(lock_key, timeout_seconds: 120) do dc = itemizable.discounts.build(discount_params) dc.effective_date = Date.current # Timestamp time of use if dc.save # Set flag to trigger discount recalculation for the newly added coupon itemizable.update_column(:recalculate_discounts, true) itemizable.reload.reset_discount end errors = itemizable.errors. + dc.errors. end Result.new(success: errors.blank?, errors: errors) end |