Class: SpreeDoordash::DeliveryDispatcher
- Inherits:
-
Object
- Object
- SpreeDoordash::DeliveryDispatcher
- Defined in:
- app/services/spree_doordash/delivery_dispatcher.rb
Overview
Dispatches a completed order to DoorDash: accepts its already-open quote if one exists and hasn't expired, or requests a fresh quote and accepts that instead. Quotes are only valid 5 minutes (DoorDash's own limit) — checkout can easily take longer, so by the time an order actually completes the quote generated during checkout (M3) may already be stale.
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.call ⇒ Object
9 |
# File 'app/services/spree_doordash/delivery_dispatcher.rb', line 9 def self.call(...) = new.call(...) |
Instance Method Details
#call(order) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'app/services/spree_doordash/delivery_dispatcher.rb', line 11 def call(order) quote_mapping = quote_mapping_for(order) return nil unless quote_mapping client = SpreeDoordash::Client.for_store(order.store || Spree::Store.default) response = client.accept_quote(quote_mapping.external_delivery_id) persist_delivery!(order, quote_mapping.external_delivery_id, response) rescue SpreeDoordash::Client::MissingCredentialsError, SpreeDoordash::RequestError => e Rails.logger.error("[SpreeDoordash] dispatch failed for order #{order.number}: #{e.}") SpreeDoordash::DeliveryMapping.find_or_initialize_by(order: order).mark_failed!(e) SpreeDoordash::Alerting.capture(e, context: { area: 'dispatch', order_number: order.number }) nil end |