class ActionService def initialize(conversation) @conversation = conversation end def mute_conversation(_params) @conversation.mute! end def snooze_conversation(_params) @conversation.snoozed! end def resolve_conversation(_params) @conversation.resolved! end def change_status(status) @conversation.update!(status: status[0]) end def add_label(labels) return if labels.empty? @conversation.add_labels(labels) end def assign_best_agent(agent_ids = []) return unless agent_belongs_to_account?(agent_ids) @agent = @account.users.find_by(id: agent_ids) @conversation.update!(assignee_id: @agent.id) if @agent.present? end def assign_team(team_ids = []) return unless team_belongs_to_account?(team_ids) @conversation.update!(team_id: team_ids[0]) end def send_email_transcript(emails) emails.each do |email| ConversationReplyMailer.with(account: @conversation.account).conversation_transcript(@conversation, email)&.deliver_later end end private def agent_belongs_to_account?(agent_ids) @account.agents.pluck(:id).include?(agent_ids[0]) end def team_belongs_to_account?(team_ids) @account.team_ids.include?(team_ids[0]) end def conversation_a_tweet? return false if @conversation.additional_attributes.blank? @conversation.additional_attributes['type'] == 'tweet' end end