iachat/enterprise/app/controllers/api/v1/accounts/captain/inboxes_controller.rb

61 lines
1.8 KiB
Ruby

class Api::V1::Accounts::Captain::InboxesController < Api::V1::Accounts::BaseController
before_action :current_account
before_action -> { check_authorization(Captain::Assistant) }
before_action :set_assistant
def index
@captain_inboxes = @assistant.captain_inboxes.includes(:inbox, :captain_unit)
end
def create
inbox = Current.account.inboxes.find(assistant_params[:inbox_id])
@captain_inbox = CaptainInbox.find_or_initialize_by(inbox_id: inbox.id)
if @captain_inbox.persisted? && @captain_inbox.captain_assistant_id != @assistant.id
render json: { error: 'Inbox já está conectada a outro assistente.' }, status: :unprocessable_entity
return
end
@captain_inbox.captain_assistant = @assistant
@captain_inbox.captain_unit_id = linked_captain_unit_id_for(inbox)
@captain_inbox.save!
move_open_conversations_to_pending(inbox)
end
def destroy
@captain_inbox = @assistant.captain_inboxes.find_by!(inbox_id: permitted_params[:inbox_id])
@captain_inbox.destroy!
head :no_content
end
private
def set_assistant
@assistant = account_assistants.find(permitted_params[:assistant_id])
end
def account_assistants
@account_assistants ||= Current.account.captain_assistants
end
def permitted_params
params.permit(:assistant_id, :id, :account_id, :inbox_id)
end
def assistant_params
params.require(:inbox).permit(:inbox_id)
end
def move_open_conversations_to_pending(inbox)
inbox.conversations.open.unassigned
.where(assignee_agent_bot_id: nil)
.update_all(status: Conversation.statuses[:pending], updated_at: Time.current)
end
def linked_captain_unit_id_for(inbox)
return nil unless defined?(Captain::Unit)
Current.account.captain_units.find_by(inbox_id: inbox.id)&.id
end
end