File: convert_to_thread.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (40 lines) | stat: -rw-r--r-- 1,155 bytes parent folder | download
1
2
3
4
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
36
37
38
39
40
# frozen_string_literal: true

module Mutations
  module Notes
    class ConvertToThread < Mutations::Notes::Base
      graphql_name 'NoteConvertToThread'
      description 'Convert a standard comment to a resolvable thread.'

      # Permissions are more lenient for converting to a thread because we do not
      # change the note body. Any user that can resolve notes can convert the note
      # to a thread.
      authorize :resolve_note

      argument :id,
        Types::GlobalIDType[Note],
        loads: Types::Notes::NoteType,
        as: :note,
        required: true,
        description: 'Global ID of the Note to convert.'

      def resolve(note:)
        authorize!(note)

        discussion = note.to_discussion

        unless discussion.can_convert_to_discussion?
          raise Gitlab::Graphql::Errors::ArgumentError, 'Note cannot be converted to a resolvable thread'
        end

        discussion = discussion.convert_to_discussion!

        if discussion.save
          { note: discussion.first_note, errors: [] }
        else
          { errors: errors_on_object(discussion.first_note) }
        end
      end
    end
  end
end