1# frozen_string_literal: true 2 3module Types 4 class QueryType < ::Types::BaseObject 5 graphql_name 'Query' 6 7 # The design management context object needs to implement #issue 8 DesignManagementObject = Struct.new(:issue) 9 10 field :project, Types::ProjectType, 11 null: true, 12 resolver: Resolvers::ProjectResolver, 13 description: "Find a project." 14 15 field :projects, Types::ProjectType.connection_type, 16 null: true, 17 resolver: Resolvers::ProjectsResolver, 18 description: "Find projects visible to the current user." 19 20 field :group, Types::GroupType, 21 null: true, 22 resolver: Resolvers::GroupResolver, 23 description: "Find a group." 24 25 field :current_user, Types::UserType, 26 null: true, 27 description: "Get information about current user." 28 29 field :namespace, Types::NamespaceType, 30 null: true, 31 resolver: Resolvers::NamespaceResolver, 32 description: "Find a namespace." 33 34 field :metadata, Types::MetadataType, 35 null: true, 36 resolver: Resolvers::MetadataResolver, 37 description: 'Metadata about GitLab.' 38 39 field :query_complexity, Types::QueryComplexityType, 40 null: true, 41 description: 'Information about the complexity of the GraphQL query.' 42 43 field :snippets, 44 Types::SnippetType.connection_type, 45 null: true, 46 resolver: Resolvers::SnippetsResolver, 47 description: 'Find Snippets visible to the current user.' 48 49 field :design_management, Types::DesignManagementType, 50 null: false, 51 description: 'Fields related to design management.' 52 53 field :milestone, ::Types::MilestoneType, 54 null: true, 55 description: 'Find a milestone.' do 56 argument :id, ::Types::GlobalIDType[Milestone], required: true, description: 'Find a milestone by its ID.' 57 end 58 59 field :container_repository, Types::ContainerRepositoryDetailsType, 60 null: true, 61 description: 'Find a container repository.' do 62 argument :id, 63 type: ::Types::GlobalIDType[::ContainerRepository], 64 required: true, 65 description: 'Global ID of the container repository.' 66 end 67 68 field :package, 69 description: 'Find a package.', 70 resolver: Resolvers::PackageDetailsResolver 71 72 field :user, Types::UserType, 73 null: true, 74 description: 'Find a user.', 75 resolver: Resolvers::UserResolver 76 77 field :users, Types::UserType.connection_type, 78 null: true, 79 description: 'Find users.', 80 resolver: Resolvers::UsersResolver 81 82 field :echo, resolver: Resolvers::EchoResolver 83 84 field :issue, Types::IssueType, 85 null: true, 86 description: 'Find an issue.' do 87 argument :id, ::Types::GlobalIDType[::Issue], required: true, description: 'Global ID of the issue.' 88 end 89 90 field :merge_request, Types::MergeRequestType, 91 null: true, 92 description: 'Find a merge request.' do 93 argument :id, ::Types::GlobalIDType[::MergeRequest], required: true, description: 'Global ID of the merge request.' 94 end 95 96 field :instance_statistics_measurements, 97 type: Types::Admin::Analytics::UsageTrends::MeasurementType.connection_type, 98 null: true, 99 description: 'Get statistics on the instance.', 100 resolver: Resolvers::Admin::Analytics::UsageTrends::MeasurementsResolver, 101 deprecated: { 102 reason: :renamed, 103 replacement: 'Query.usageTrendsMeasurements', 104 milestone: '13.10' 105 } 106 107 field :usage_trends_measurements, Types::Admin::Analytics::UsageTrends::MeasurementType.connection_type, 108 null: true, 109 description: 'Get statistics on the instance.', 110 resolver: Resolvers::Admin::Analytics::UsageTrends::MeasurementsResolver 111 112 field :ci_application_settings, Types::Ci::ApplicationSettingType, 113 null: true, 114 description: 'CI related settings that apply to the entire instance.' 115 116 field :runner_platforms, resolver: Resolvers::Ci::RunnerPlatformsResolver 117 field :runner_setup, resolver: Resolvers::Ci::RunnerSetupResolver 118 119 field :runner, Types::Ci::RunnerType, 120 null: true, 121 resolver: Resolvers::Ci::RunnerResolver, 122 extras: [:lookahead], 123 description: "Find a runner." 124 125 field :runners, Types::Ci::RunnerType.connection_type, 126 null: true, 127 resolver: Resolvers::Ci::RunnersResolver, 128 description: "Find runners visible to the current user." 129 130 field :ci_config, resolver: Resolvers::Ci::ConfigResolver, complexity: 126 # AUTHENTICATED_MAX_COMPLEXITY / 2 + 1 131 132 field :timelogs, Types::TimelogType.connection_type, 133 null: true, 134 description: 'Find timelogs visible to the current user.', 135 extras: [:lookahead], 136 complexity: 5, 137 resolver: ::Resolvers::TimelogResolver 138 139 field :board_list, ::Types::BoardListType, 140 null: true, 141 resolver: Resolvers::BoardListResolver 142 143 field :topics, Types::Projects::TopicType.connection_type, 144 null: true, 145 resolver: Resolvers::TopicsResolver, 146 description: "Find project topics." 147 148 def design_management 149 DesignManagementObject.new(nil) 150 end 151 152 def issue(id:) 153 # TODO: remove this line when the compatibility layer is removed 154 # See: https://gitlab.com/gitlab-org/gitlab/-/issues/257883 155 id = ::Types::GlobalIDType[::Issue].coerce_isolated_input(id) 156 GitlabSchema.find_by_gid(id) 157 end 158 159 def merge_request(id:) 160 # TODO: remove this line when the compatibility layer is removed 161 # See: https://gitlab.com/gitlab-org/gitlab/-/issues/257883 162 id = ::Types::GlobalIDType[::MergeRequest].coerce_isolated_input(id) 163 GitlabSchema.find_by_gid(id) 164 end 165 166 def milestone(id:) 167 # TODO: remove this line when the compatibility layer is removed 168 # See: https://gitlab.com/gitlab-org/gitlab/-/issues/257883 169 id = ::Types::GlobalIDType[Milestone].coerce_isolated_input(id) 170 GitlabSchema.find_by_gid(id) 171 end 172 173 def container_repository(id:) 174 # TODO: remove this line when the compatibility layer is removed 175 # See: https://gitlab.com/gitlab-org/gitlab/-/issues/257883 176 id = ::Types::GlobalIDType[::ContainerRepository].coerce_isolated_input(id) 177 GitlabSchema.find_by_gid(id) 178 end 179 180 def current_user 181 context[:current_user] 182 end 183 184 def ci_application_settings 185 application_settings 186 end 187 188 def application_settings 189 Gitlab::CurrentSettings.current_application_settings 190 end 191 192 def query_complexity 193 context.query 194 end 195 end 196end 197 198Types::QueryType.prepend_mod_with('Types::QueryType') 199