Class: Assistant::TechnicalArticleManagementToolBuilder::RemoveRelatedMaterialTool

Inherits:
ManagementTool
  • Object
show all
Defined in:
app/services/assistant/technical_article_management_tool_builder.rb

Overview

Removes one curated link from a current draft.

Instance Method Summary collapse

Methods inherited from ManagementTool

#initialize

Constructor Details

This class inherits a constructor from Assistant::TechnicalArticleManagementToolBuilder::ManagementTool

Instance Method Details

#execute(id:, edit_token:, content_link_id: nil, content_link_key: nil) ⇒ String

Returns JSON removal result.

Parameters:

  • id (Integer)

    draft article ID

  • edit_token (String)

    current optimistic token

  • content_link_id (Integer, nil) (defaults to: nil)

    existing owned link ID

  • content_link_key (String, nil) (defaults to: nil)

    stable staged link key

Returns:

  • (String)

    JSON removal result



777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
# File 'app/services/assistant/technical_article_management_tool_builder.rb', line 777

def execute(id:, edit_token:, content_link_id: nil, content_link_key: nil, **)
  safely('remove related material') do
    raise ToolError, 'Provide content_link_id or content_link_key.' if
      content_link_id.blank? && content_link_key.blank?

    with_current_article_for_related_material(id, edit_token) do |article, revision|
      if revision
        require_actor!
        preferred_id = content_link_key.present? ? nil : content_link_id
        removed = revision.unstage_content_link!(key: content_link_key, id: preferred_id)
        return revision_response(
          article,
          revision,
          {
            removed_content_link_id: removed['id'],
            removed_content_link_key: removed['key']
          }.compact
        )
      end

      raise ToolError, 'A live ContentLink ID is required for a new draft.' if content_link_id.blank?

      link = article.outbound_content_links.find(content_link_id)
      raise ToolError, 'Consolidation source links are workflow-managed and cannot be removed directly.' if link.workflow_managed?

      link.destroy!
      article.update!(updater_id: require_actor!.id, updated_at: Time.current)
      return response(article, removed_content_link_id: content_link_id.to_i)
    end
  end
end

#nameString

Returns stable tool name.

Returns:

  • (String)

    stable tool name



770
# File 'app/services/assistant/technical_article_management_tool_builder.rb', line 770

def name = 'remove_technical_article_related_material'