Class: SpreeCmCommissioner::WaitingRoom::BypassEligibility
- Inherits:
-
Object
- Object
- SpreeCmCommissioner::WaitingRoom::BypassEligibility
- Includes:
- Spree::ServiceModule::Base
- Defined in:
- app/services/spree_cm_commissioner/waiting_room/bypass_eligibility.rb
Constant Summary collapse
- STUCK_STATES =
States vpago only clears via the admin reprocess action — genuinely stuck on our side. Excludes
failed(clean decline): the user's own abandonment, not something we broke. %w[processing void invalid checkout].freeze
Instance Method Summary collapse
Instance Method Details
#call(jwt:, order_token:, user: nil) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'app/services/spree_cm_commissioner/waiting_room/bypass_eligibility.rb', line 23 def call(jwt:, order_token:, user: nil) return failure(:missing_order_token) if order_token.blank? payload = verified_payload(jwt, order_token) return failure(:invalid_bypass_jwt) if payload.nil? payment = Spree::Payment.find_by(number: payload['payment_number']) return failure(:invalid_bypass_jwt) if payment.nil? return failure(:order_token_mismatch) unless payment.order&.token == order_token return failure(:order_not_owned_by_user) unless owned_by_caller?(payment.order, user) return failure(:payment_not_stuck) unless STUCK_STATES.include?(payment.state) return failure(:order_already_paid) if payment.order.payment_state == 'paid' success(payment_number: payment.number, source: payload['source']) # Backstop: a best-effort bypass must never 500 session-create over a bad token. rescue StandardError => e Rails.logger.warn("[WaitingRoom] bypass verification failed: #{e.class}: #{e.}") failure(:invalid_bypass_jwt) end |