Class: SpreeCmCommissioner::InviteGuests::BulkCreate

Inherits:
Object
  • Object
show all
Includes:
Spree::ServiceModule::Base
Defined in:
app/services/spree_cm_commissioner/invite_guests/bulk_create.rb

Instance Method Summary collapse

Instance Method Details

#call(invite_guest_group_id:, quantity:, invite_guest_attributes:, invite_context:) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'app/services/spree_cm_commissioner/invite_guests/bulk_create.rb', line 6

def call(invite_guest_group_id:, quantity:, invite_guest_attributes:, invite_context:)
  invite_guest_group = SpreeCmCommissioner::InviteGuestGroup.find_by(id: invite_guest_group_id)
  return failure(nil, 'Invite guest group not found') unless invite_guest_group
  return failure(nil, 'Quantity must be greater than 0') if quantity.to_i <= 0

  context = invite_context.respond_to?(:to_h) ? invite_context.to_h : {}
  variant_id = context[:variant_id] || context['variant_id']
  event_id = context[:event_id] || context['event_id']

  invite_guest_group.update!(processing_status: :processing)

  invite_guest_params = invite_guest_attributes.respond_to?(:to_h) ? invite_guest_attributes.to_h : {}
  created_invite_guests = create_invite_guests_in_transaction(
    invite_guest_group_id: invite_guest_group.id,
    quantity: quantity,
    invite_guest_params: invite_guest_params,
    invite_context: context
  )

  mark_group_completed(invite_guest_group, created_invite_guests, quantity, variant_id, event_id)
  success(invite_guests: created_invite_guests)
rescue StandardError => e
  mark_group_failed(invite_guest_group, e, quantity, variant_id, event_id)
  failure(nil, e.message)
end