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