Class: SpreeCmCommissioner::InventoryHolds::ValidateLimits

Inherits:
Object
  • Object
show all
Extended by:
ServiceModuleThrowable
Includes:
Spree::ServiceModule::Base
Defined in:
app/services/spree_cm_commissioner/inventory_holds/validate_limits.rb

Constant Summary collapse

ExceededActiveHoldsError =
Class.new(StandardError)
IpRateLimitError =
Class.new(StandardError)
HoldCooldownError =
Class.new(StandardError)
MAX_ACTIVE_HOLDS_PER_USER =
ENV.fetch('MAX_ACTIVE_HOLDS_PER_USER', '3').to_i
COOLDOWN_AFTER_EXPIRY =
ENV.fetch('HOLD_COOLDOWN_AFTER_EXPIRY_IN_MINUTES', '2').to_i.minutes
DEFAULT_HOLDS_PER_IP_PER_HOUR =
ENV.fetch('MAX_HOLDS_PER_IP_PER_HOUR', '5').to_i

Instance Method Summary collapse

Methods included from ServiceModuleThrowable

call!

Instance Method Details

#call(order:) ⇒ Object

Validates all inventory hold limits for the given order



16
17
18
19
20
21
22
23
24
25
26
# File 'app/services/spree_cm_commissioner/inventory_holds/validate_limits.rb', line 16

def call(order:)
  validate_user_hold_limits!(order) if order.user.present?
  validate_ip_rate_limit!(order)
  validate_cooldown!(order)

  success(nil)
rescue StandardError => e
  error = { error_type: e.class.name.demodulize, order_id: order.id, error: e.message }
  CmAppLogger.error(label: "#{self.class.name}#call failed", data: error)
  failure(nil, e.message)
end