Class: SpreeCmCommissioner::OrderCompleteTelegramSender

Inherits:
BaseInteractor
  • Object
show all
Defined in:
app/interactors/spree_cm_commissioner/order_complete_telegram_sender.rb

Instance Method Summary collapse

Instance Method Details

#callObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'app/interactors/spree_cm_commissioner/order_complete_telegram_sender.rb', line 5

def call
  context.user = Spree::User.find_by(id: order.user_id)
  return context.fail!(message: 'User must be present') if context.user.blank?
  return context.fail!(message: 'User is not connected to Telegram') if context.user.user_identity_providers.empty?

  # current implmenetation of identity providers is only allow user to connect 1 Telegram account.
  # but we loop here just in case those logics are changed.
  context.user.user_identity_providers.telegram.each do |provider|
    next unless provider.telegram_bots.any?

    telegram_bot = (provider)
    send(telegram_bot.token, provider.telegram_chat_id)
  end
end

#get_last_sign_in_bot(user_identity_provider) ⇒ Object



37
38
39
# File 'app/interactors/spree_cm_commissioner/order_complete_telegram_sender.rb', line 37

def (user_identity_provider)
  user_identity_provider.user_identity_provider_telegram_bots..telegram_bot
end

#message_factoryObject



29
30
31
32
33
34
35
# File 'app/interactors/spree_cm_commissioner/order_complete_telegram_sender.rb', line 29

def message_factory
  context.message_factory ||= OrderTelegramMessageFactory.new(
    title: 'Order Summary',
    show_details_link: true,
    order: order
  )
end

#send(telegram_bot_token, chat_id) ⇒ Object



20
21
22
23
24
25
26
27
# File 'app/interactors/spree_cm_commissioner/order_complete_telegram_sender.rb', line 20

def send(telegram_bot_token, chat_id)
  telegram_client = ::Telegram::Bot::Client.new(telegram_bot_token)
  telegram_client.send_message(
    chat_id: chat_id,
    parse_mode: message_factory.parse_mode,
    text: message_factory.message
  )
end