Class: Assistant::TechnicalArticleManagementToolBuilder::MergeTool

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

Overview

Creates a multi-source replacement 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(source_article_ids:, subject:, solution:, description: nil) ⇒ String

Returns JSON consolidation result.

Parameters:

  • source_article_ids (Array<Integer>)

    approved source IDs

  • subject (String)

    consolidated title

  • solution (String)

    consolidated troubleshooting HTML

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

    scope summary

Returns:

  • (String)

    JSON consolidation result



836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
# File 'app/services/assistant/technical_article_management_tool_builder.rb', line 836

def execute(source_article_ids:, subject:, solution:, description: nil, **)
  safely('merge') do
    normalized_source_ids = Array(source_article_ids).map(&:to_i).select(&:positive?).uniq
    if normalized_source_ids.size > ArticleTechnical::Consolidator::MAX_SOURCE_ARTICLES
      raise ToolError,
            "Select at most #{ArticleTechnical::Consolidator::MAX_SOURCE_ARTICLES} Technical Articles per consolidation."
    end

    authorize!(:create, ArticleTechnical)
    sources = ArticleTechnical.where(id: normalized_source_ids).to_a
    missing_source_ids = normalized_source_ids - sources.map(&:id)
    raise ToolError, "Technical Articles not found: #{missing_source_ids.join(', ')}." if missing_source_ids.any?

    sources.each { |source| authorize!(:update, source) }
    result = ArticleTechnical::Consolidator.call(
      source_article_ids: normalized_source_ids,
      author: require_actor!,
      subject: subject,
      description: description,
      solution: solution
    )
    raise ToolError, result.errors.to_sentence unless result.success?

    response(
      result.article,
      message: 'Consolidation draft created; every source remains live until approval.'
    )
  end
end

#nameString

Returns stable tool name.

Returns:

  • (String)

    stable tool name



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

def name = 'merge_technical_articles'