1# frozen_string_literal: true
2
3module Discussions
4  class CaptureDiffNotePositionsService
5    def initialize(merge_request)
6      @merge_request = merge_request
7    end
8
9    def execute
10      return unless merge_request.has_complete_diff_refs?
11
12      discussions, paths = build_discussions
13
14      service = Discussions::CaptureDiffNotePositionService.new(merge_request, paths)
15
16      discussions.each do |discussion|
17        service.execute(discussion)
18      end
19    end
20
21    private
22
23    attr_reader :merge_request
24
25    def build_discussions
26      active_diff_discussions = merge_request.notes.new_diff_notes.discussions.select do |discussion|
27        discussion.active?(merge_request.diff_refs)
28      end
29      paths = active_diff_discussions.flat_map { |n| n.diff_file.paths }
30
31      [active_diff_discussions, paths]
32    end
33  end
34end
35