55 lines
1.4 KiB
Ruby
55 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Mutations
|
|
module IncidentManagement
|
|
module TimelineEvent
|
|
class PromoteFromNote < Base
|
|
graphql_name 'TimelineEventPromoteFromNote'
|
|
|
|
include NotesHelper
|
|
|
|
argument :note_id, Types::GlobalIDType[::Note],
|
|
required: true,
|
|
description: 'Note ID from which the timeline event promoted.'
|
|
|
|
def resolve(note_id:)
|
|
note = find_object(id: note_id)
|
|
incident = note&.noteable
|
|
|
|
authorize!(incident)
|
|
|
|
response ::IncidentManagement::TimelineEvents::CreateService.new(
|
|
incident,
|
|
current_user,
|
|
promoted_from_note: note,
|
|
note: build_note_string(note),
|
|
occurred_at: note.created_at,
|
|
editable: true
|
|
).execute
|
|
end
|
|
|
|
private
|
|
|
|
def find_object(id:)
|
|
GitlabSchema.object_from_id(id, expected_type: ::Note).sync
|
|
end
|
|
|
|
def authorize!(object)
|
|
raise_noteable_not_incident! if object && !object.try(:incident?)
|
|
|
|
super
|
|
end
|
|
|
|
def build_note_string(note)
|
|
commented = _('commented')
|
|
"@#{note.author.username} [#{commented}](#{noteable_note_url(note)}): '#{note.note}'"
|
|
end
|
|
|
|
def raise_noteable_not_incident!
|
|
raise_resource_not_available_error! 'Note does not belong to an incident'
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|