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
41
|
# frozen_string_literal: true
module Types
module Notes
class DiscussionType < BaseObject
graphql_name 'Discussion'
DiscussionID = ::Types::GlobalIDType[::Discussion]
authorize :read_note
implements Types::ResolvableInterface
field :created_at, Types::TimeType, null: false,
description: "Timestamp of the discussion's creation."
field :id, DiscussionID, null: false,
description: "ID of this discussion."
field :noteable, Types::NoteableType, null: true,
description: 'Object which the discussion belongs to.'
field :notes, Types::Notes::NoteType.connection_type, null: false,
description: 'All notes in the discussion.'
field :reply_id, DiscussionID, null: false,
description: 'ID used to reply to this discussion.'
# DiscussionID.coerce_result is suitable here, but will always mark this
# as being a 'Discussion'. Using `GlobalId.build` guarantees that we get
# the correct class, and that it matches `id`.
def reply_id
::Gitlab::GlobalId.build(object, id: object.reply_id)
end
def noteable
noteable = object.noteable
return unless Ability.allowed?(context[:current_user], :"read_#{noteable.to_ability_name}", noteable)
noteable
end
end
end
end
|