From 08bbb9fce66cb46d3262e6cd4c4379b59f065be0 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Thu, 9 Mar 2017 19:29:11 -0600 Subject: Add option to start a new discussion on an MR --- app/services/notes/build_service.rb | 29 +++++++++++++++++++++++++++++ app/services/notes/create_service.rb | 6 ++---- 2 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 app/services/notes/build_service.rb (limited to 'app/services/notes') diff --git a/app/services/notes/build_service.rb b/app/services/notes/build_service.rb new file mode 100644 index 00000000000..47ed3e3fc3d --- /dev/null +++ b/app/services/notes/build_service.rb @@ -0,0 +1,29 @@ +module Notes + class BuildService < BaseService + def execute + # TODO: Remove when we use a selectbox instead of a submit button + params[:type] = DiscussionNote.name if params.delete(:new_discussion) + + in_reply_to_discussion_id = params.delete(:in_reply_to_discussion_id) + if project && in_reply_to_discussion_id.present? + discussion = + project.notes.find_original_discussion(in_reply_to_discussion_id) || + project.notes.find_discussion(in_reply_to_discussion_id) + + unless discussion + note = Note.new + note.errors.add(:base, 'Discussion to reply to cannot be found') + return note + end + + params.merge!(discussion.reply_attributes) + end + + note = Note.new(params) + note.project = project + note.author = current_user + + note + end + end +end diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb index 61d66a26932..c08cddcbee5 100644 --- a/app/services/notes/create_service.rb +++ b/app/services/notes/create_service.rb @@ -3,10 +3,8 @@ module Notes def execute merge_request_diff_head_sha = params.delete(:merge_request_diff_head_sha) - note = Note.new(params) - note.project = project - note.author = current_user - note.system = false + note = Notes::BuildService.new(project, current_user, params).execute + return note unless note.valid? # We execute commands (extracted from `params[:note]`) on the noteable # **before** we save the note because if the note consists of commands -- cgit v1.2.1