gitlab-org--gitlab-foss/app/services/work_items/parent_links/create_service.rb

59 lines
1.5 KiB
Ruby

# frozen_string_literal: true
module WorkItems
module ParentLinks
class CreateService < IssuableLinks::CreateService
private
# rubocop: disable CodeReuse/ActiveRecord
def relate_issuables(work_item)
link = WorkItems::ParentLink.find_or_initialize_by(work_item: work_item)
link.work_item_parent = issuable
if link.changed? && link.save
create_notes(work_item)
end
link
end
# rubocop: enable CodeReuse/ActiveRecord
def linkable_issuables(work_items)
@linkable_issuables ||= begin
return [] unless can?(current_user, :admin_parent_link, issuable)
work_items.select do |work_item|
linkable?(work_item)
end
end
end
def linkable?(work_item)
can?(current_user, :admin_parent_link, work_item) &&
!previous_related_issuables.include?(work_item)
end
def previous_related_issuables
@related_issues ||= issuable.work_item_children.to_a
end
def extract_references
params[:issuable_references]
end
def create_notes(work_item)
SystemNoteService.relate_work_item(issuable, work_item, current_user)
end
def target_issuable_type
issuable.issue_type == 'issue' ? 'task' : issuable.issue_type
end
def issuables_not_found_message
_('No matching %{issuable} found. Make sure that you are adding a valid %{issuable} ID.' %
{ issuable: target_issuable_type })
end
end
end
end