50 lines
1.2 KiB
Ruby
50 lines
1.2 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Mutations
|
||
|
module Notes
|
||
|
module Create
|
||
|
# This is a Base class for the Note creation Mutations and is not
|
||
|
# mounted as a GraphQL mutation itself.
|
||
|
class Base < Mutations::Notes::Base
|
||
|
authorize :create_note
|
||
|
|
||
|
argument :noteable_id,
|
||
|
GraphQL::ID_TYPE,
|
||
|
required: true,
|
||
|
description: 'The global id of the resource to add a note to'
|
||
|
|
||
|
argument :body,
|
||
|
GraphQL::STRING_TYPE,
|
||
|
required: true,
|
||
|
description: copy_field_description(Types::Notes::NoteType, :body)
|
||
|
|
||
|
private
|
||
|
|
||
|
def resolve(args)
|
||
|
noteable = authorized_find!(id: args[:noteable_id])
|
||
|
|
||
|
check_object_is_noteable!(noteable)
|
||
|
|
||
|
note = ::Notes::CreateService.new(
|
||
|
noteable.project,
|
||
|
current_user,
|
||
|
create_note_params(noteable, args)
|
||
|
).execute
|
||
|
|
||
|
{
|
||
|
note: (note if note.persisted?),
|
||
|
errors: errors_on_object(note)
|
||
|
}
|
||
|
end
|
||
|
|
||
|
def create_note_params(noteable, args)
|
||
|
{
|
||
|
noteable: noteable,
|
||
|
note: args[:body]
|
||
|
}
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|