Commit f9218898 authored by Josh Frye's avatar Josh Frye

[WIP] Background process note logic for #3948

parent 88e16c3d
...@@ -106,7 +106,7 @@ class Projects::NotesController < Projects::ApplicationController ...@@ -106,7 +106,7 @@ class Projects::NotesController < Projects::ApplicationController
{ notes_left: [note], notes_right: [] } { notes_left: [note], notes_right: [] }
else else
{ notes_left: [], notes_right: [note] } { notes_left: [], notes_right: [note] }
end end
else else
template = "projects/notes/_diff_notes_with_reply" template = "projects/notes/_diff_notes_with_reply"
locals = { notes: [note] } locals = { notes: [note] }
......
...@@ -6,27 +6,12 @@ module Notes ...@@ -6,27 +6,12 @@ module Notes
note.system = false note.system = false
if note.save if note.save
notification_service.new_note(note) # Finish the harder work in the background
NewNoteWorker.perform_in(2.seconds, note.id, params)
# Skip system notes, like status changes and cross-references and awards
unless note.system || note.is_award
event_service.leave_note(note, note.author)
note.create_cross_references!
execute_hooks(note)
end
end end
note note
end end
def hook_data(note)
Gitlab::NoteDataBuilder.build(note, current_user)
end
def execute_hooks(note)
note_data = hook_data(note)
note.project.execute_hooks(note_data, :note_hooks)
note.project.execute_services(note_data, :note_hooks)
end
end end
end end
module Notes
class PostProcessService
attr_accessor :note
def initialize(note)
@note = note
end
def execute
# Skip system notes, like status changes and cross-references and awards
unless @note.system || @note.is_award
EventCreateService.new.leave_note(@note, @note.author)
@note.create_cross_references!
execute_note_hooks
end
end
def hook_data
Gitlab::NoteDataBuilder.build(@note, @note.author)
end
def execute_note_hooks
note_data = hook_data
@note.project.execute_hooks(note_data, :note_hooks)
@note.project.execute_services(note_data, :note_hooks)
end
end
end
class NewNoteWorker
include Sidekiq::Worker
sidekiq_options queue: :default
def perform(note_id, note_params)
note = Note.find(note_id)
NotificationService.new.new_note(note)
Notes::PostProcessService.new(note).execute
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment