1# frozen_string_literal: true
2
3module IssueLinks
4  class CreateService < IssuableLinks::CreateService
5    # rubocop: disable CodeReuse/ActiveRecord
6    def relate_issuables(referenced_issue)
7      link = IssueLink.find_or_initialize_by(source: issuable, target: referenced_issue)
8
9      set_link_type(link)
10
11      if link.changed? && link.save
12        create_notes(referenced_issue)
13      end
14
15      link
16    end
17    # rubocop: enable CodeReuse/ActiveRecord
18
19    def linkable_issuables(issues)
20      @linkable_issuables ||= begin
21        issues.select { |issue| can?(current_user, :admin_issue_link, issue) }
22      end
23    end
24
25    def create_notes(referenced_issue)
26      SystemNoteService.relate_issue(issuable, referenced_issue, current_user)
27      SystemNoteService.relate_issue(referenced_issue, issuable, current_user)
28    end
29
30    def previous_related_issuables
31      @related_issues ||= issuable.related_issues(current_user).to_a
32    end
33
34    private
35
36    def set_link_type(_link)
37      # EE only
38    end
39
40    def track_event
41      track_incident_action(current_user, issuable, :incident_relate)
42    end
43  end
44end
45
46IssueLinks::CreateService.prepend_mod_with('IssueLinks::CreateService')
47