Class: Notes::BuildService

Inherits:
BaseService show all
Defined in:
app/services/notes/build_service.rb

Instance Attribute Summary

Attributes inherited from BaseService

#current_user, #params, #project

Instance Method Summary collapse

Methods inherited from BaseService

#initialize

Methods included from BaseServiceUtility

#deny_visibility_level, #event_service, #log_error, #log_info, #notification_service, #system_hook_service, #todo_service, #visibility_level

Methods included from Gitlab::Allowable

#can?

Constructor Details

This class inherits a constructor from BaseService

Instance Method Details

#executeObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/services/notes/build_service.rb', line 5

def execute
  in_reply_to_discussion_id = params.delete(:in_reply_to_discussion_id)
  external_author = params.delete(:external_author)

  discussion = nil

  if external_author.present?
     = Notes::NoteMetadata.new(email_participant: external_author)
    params[:note_metadata] = 
  end

  if in_reply_to_discussion_id.present?
    discussion = find_discussion(in_reply_to_discussion_id)

    return discussion_not_found unless discussion && can?(current_user, :create_note, discussion.noteable)

    discussion = discussion.convert_to_discussion! if discussion.can_convert_to_discussion?

    params.merge!(discussion.reply_attributes)
  end

  # The `confidential` param for notes is deprecated with 15.3
  # and renamed to `internal`.
  # We still accept `confidential` until the param gets removed from the API.
  # Until we have not migrated the database column to `internal` we need to rename
  # the parameter. Issue: https://gitlab.com/gitlab-org/gitlab/-/issues/367923.
  params[:confidential] = params[:internal] || params[:confidential]
  params.delete(:internal)

  new_note(params, discussion)
end