class Sms::IncomingMessageService include ::FileTypeHelper pattr_initialize [:inbox!, :params!] def perform set_contact set_conversation @message = @conversation.messages.create( content: params[:text], account_id: @inbox.account_id, inbox_id: @inbox.id, message_type: :incoming, sender: @contact, source_id: params[:id] ) end private def account @account ||= @inbox.account end def phone_number params[:from] end def formatted_phone_number TelephoneNumber.parse(phone_number).international_number end def set_contact contact_inbox = ::ContactBuilder.new( source_id: params[:from], inbox: @inbox, contact_attributes: contact_attributes ).perform @contact_inbox = contact_inbox @contact = contact_inbox.contact end def conversation_params { account_id: @inbox.account_id, inbox_id: @inbox.id, contact_id: @contact.id, contact_inbox_id: @contact_inbox.id } end def set_conversation @conversation = @contact_inbox.conversations.first return if @conversation @conversation = ::Conversation.create!(conversation_params) end def contact_attributes { name: formatted_phone_number, phone_number: phone_number } end end