Class: Spree::Orders::CreateUserAccount

Inherits:
Object
  • Object
show all
Includes:
ServiceModule::Base
Defined in:
app/services/spree/orders/create_user_account.rb

Instance Method Summary collapse

Methods included from ServiceModule::Base

prepended

Instance Method Details

#call(order:, accepts_email_marketing: false) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/services/spree/orders/create_user_account.rb', line 8

def call(order:, accepts_email_marketing: false)
  existing_user = Spree.user_class.find_by(email: order.email)
  if existing_user.present?
    order.update_columns(user_id: existing_user.id, updated_at: Time.current)
    order.user = existing_user
    return success(existing_user)
  end

  user = create_new_user(order, accepts_email_marketing)
  return failure(:user_creation_failed) unless user.persisted?

  assign_ship_address(order, user)
  assign_bill_address(order, user)

  # assign newly created user to the order
  # using update_columns to avoid running validations/callbacks
  order.update_columns(user_id: user.id, updated_at: Time.current)
  order.user = user

  # send welcome email
  user.send_welcome_email if user.respond_to?(:send_welcome_email)

  success(user.reload)
end