Class: Spree::Api::V2::Storefront::QueueDraftOrdersController

Inherits:
ResourceController
  • Object
show all
Includes:
SpreeCmCommissioner::LoadTestBypassable
Defined in:
app/controllers/spree/api/v2/storefront/queue_draft_orders_controller.rb

Instance Method Summary collapse

Instance Method Details

#createObject

Accepts a draft order request without building it: writes a queued Firestore status document and schedules the real build (SpreeCmCommissioner::DraftOrders::Create) on a background job. The app watches the returned document for the eventual outcome instead of waiting on this request.

Endpoint: POST /api/v2/storefront/queue_draft_orders Params: same as POST /api/v2/storefront/draft_orders — line_items: Array of { variant_id:, quantity:, options: {}, public_metadata: {}, private_metadata: {} } (required) st: private sale token granting this order the product's locked stock (optional).



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'app/controllers/spree/api/v2/storefront/queue_draft_orders_controller.rb', line 19

def create
  result = SpreeCmCommissioner::QueueDraftOrders::Enqueue.call(
    create_type: 'generic',
    creation_params: {
      line_items: draft_order_line_items,
      user: spree_current_user,
      store: current_store,
      currency: current_currency,
      options: {
        device_id: device_id,
        last_ip_address: request.remote_ip,
        private_sale_token: params[:st]
      }
    },
    locale: I18n.locale.to_s
  )

  if result.success?
    render_serialized_payload { result.value }
  else
    render_error_payload(result.error)
  end
end