Updated

app/use_cases/accounts/apps/evolution_apis/message / import.rb

C
103 lines of codes
11 methods
10.2 complexity/method
14 churn
112.18 complexity
0 duplications
class Accounts::Apps::EvolutionApis::Message::Import
  1. Accounts::Apps::EvolutionApis::Message::Import has no descriptive comment
def initialize(evolution_api, webhook, content) @evolution_api = evolution_api @webhook = webhook @content = content end def call result = create_evolution_api_message_event { ok: result } end def create_evolution_api_message_event contact = find_or_create_contact import_message(contact) end def find_or_create_contact if group_message? find_or_create_group_contact else find_or_create_person_contact end end def find_or_create_person_contact phone_number = '+' + @webhook['data']['key']['remoteJid'].gsub(/\D/, '') contact = Accounts::Contacts::GetByParams.call(@evolution_api.account, { phone: phone_number })[:ok] contact = create_person_contact(phone_number) if contact.blank? update_contact_name_if_missing(contact) contact end def update_contact_name_if_missing(contact) if @webhook['data']['key']['fromMe'].to_s == 'false' && contact.full_name.blank?
  1. Accounts::Apps::EvolutionApis::Message::Import#update_contact_name_if_missing calls '@webhook['data']' 2 times Locations: 0 1
contact.update(full_name: @webhook['data']['pushName'])
  1. Accounts::Apps::EvolutionApis::Message::Import#update_contact_name_if_missing calls '@webhook['data']' 2 times Locations: 0 1
end end def find_or_create_group_contact
  1. Accounts::Apps::EvolutionApis::Message::Import#find_or_create_group_contact has a flog score of 29
  2. Accounts::Apps::EvolutionApis::Message::Import#find_or_create_group_contact has approx 9 statements
group_id = @webhook['data']['key']['remoteJid'] group_details = group_details(group_id) contact_params = { full_name: "#{group_details[:group_name]} - Grupo", additional_attributes: group_details } contact = @evolution_api.account.contacts.where('additional_attributes @> ?', { group_id: group_id }.to_json).first
  1. Accounts::Apps::EvolutionApis::Message::Import#find_or_create_group_contact calls '@evolution_api.account' 2 times Locations: 0 1
if contact.present?
  1. Accounts::Apps::EvolutionApis::Message::Import#find_or_create_group_contact refers to 'contact' more than self (maybe move it to another class?) Locations: 0 1 2 3
contact.full_name = contact_params[:full_name]
  1. Accounts::Apps::EvolutionApis::Message::Import#find_or_create_group_contact refers to 'contact' more than self (maybe move it to another class?) Locations: 0 1 2 3
contact.additional_attributes = contact.additional_attributes.merge(contact_params[:additional_attributes])
  1. Accounts::Apps::EvolutionApis::Message::Import#find_or_create_group_contact refers to 'contact' more than self (maybe move it to another class?) Locations: 0 1 2 3
else contact = ContactBuilder.new( @evolution_api.account.users.first,
  1. Accounts::Apps::EvolutionApis::Message::Import#find_or_create_group_contact calls '@evolution_api.account' 2 times Locations: 0 1
ActionController::Parameters.new(contact_params) ).perform end contact.save!
  1. Accounts::Apps::EvolutionApis::Message::Import#find_or_create_group_contact refers to 'contact' more than self (maybe move it to another class?) Locations: 0 1 2 3
contact end def create_person_contact(phone_number) if @webhook['data']['key']['fromMe'].to_s == 'true'
  1. Accounts::Apps::EvolutionApis::Message::Import#create_person_contact calls '@webhook['data']' 2 times Locations: 0 1
Contact.create(phone: phone_number, account: @evolution_api.account)
  1. Accounts::Apps::EvolutionApis::Message::Import#create_person_contact calls '@evolution_api.account' 2 times Locations: 0 1
else Contact.create(full_name: @webhook['data']['pushName'], phone: phone_number,
  1. Accounts::Apps::EvolutionApis::Message::Import#create_person_contact calls '@webhook['data']' 2 times Locations: 0 1
account: @evolution_api.account)
  1. Accounts::Apps::EvolutionApis::Message::Import#create_person_contact calls '@evolution_api.account' 2 times Locations: 0 1
end end def group_details(group_id) request = Faraday.get( "#{@evolution_api.endpoint_url}/group/findGroupInfos/#{@evolution_api.instance}?groupJid=#{group_id}", {}, @evolution_api.request_instance_headers ) request_body = JSON.parse(request.body) { group_id: group_id, group_name: request_body['subject'], group_owner_id: request_body['subjectOwner'] } end def group_message? @webhook['data']['key']['remoteJid'].gsub(/\D/, '').size > 15 end def import_message(contact) Event.create( account: @evolution_api.account, kind: 'evolution_api_message', from_me: @webhook['data']['key']['fromMe'],
  1. Accounts::Apps::EvolutionApis::Message::Import#import_message calls '@webhook['data']' 2 times Locations: 0 1
  2. Accounts::Apps::EvolutionApis::Message::Import#import_message calls '@webhook['data']['key']' 2 times Locations: 0 1
contact: contact, content: @content, done: true, done_at: @webhook['date_time'], app: @evolution_api, additional_attributes: { message_id: @webhook['data']['key']['id'] }
  1. Accounts::Apps::EvolutionApis::Message::Import#import_message calls '@webhook['data']' 2 times Locations: 0 1
  2. Accounts::Apps::EvolutionApis::Message::Import#import_message calls '@webhook['data']['key']' 2 times Locations: 0 1
) end end