Commit a19b5763 authored by Robert Speicher's avatar Robert Speicher

Merge branch 'mo-graphql-query-projects-by-ids' into 'master'

Allow projects to be queried by ids with GraphQL

See merge request gitlab-org/gitlab!42372
parents 4e4f7da7 be636a20
......@@ -12,9 +12,13 @@ module Resolvers
required: false,
description: 'Search query for project name, path, or description'
argument :ids, [GraphQL::ID_TYPE],
required: false,
description: 'Filter projects by IDs'
def resolve(**args)
ProjectsFinder
.new(current_user: current_user, params: project_finder_params(args))
.new(current_user: current_user, params: project_finder_params(args), project_ids_relation: parse_gids(args[:ids]))
.execute
end
......@@ -27,5 +31,9 @@ module Resolvers
search: params[:search]
}.compact
end
def parse_gids(gids)
gids&.map { |gid| GitlabSchema.parse_gid(gid, expected_type: ::Project).model_id }
end
end
end
---
title: Query projects by ids with GraphQL
merge_request: 42372
author:
type: added
......@@ -13981,6 +13981,11 @@ type Query {
"""
first: Int
"""
Filter projects by IDs
"""
ids: [ID!]
"""
Returns the last _n_ elements from the list.
"""
......
......@@ -40936,6 +40936,24 @@
},
"defaultValue": null
},
{
"name": "ids",
"description": "Filter projects by IDs",
"type": {
"kind": "LIST",
"name": null,
"ofType": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
"name": "ID",
"ofType": null
}
}
},
"defaultValue": null
},
{
"name": "after",
"description": "Returns the elements in the list that come after the specified cursor.",
......@@ -71,6 +71,14 @@ RSpec.describe Resolvers::ProjectsResolver do
is_expected.to contain_exactly(project, private_project)
end
end
context 'when ids filter is provided' do
let(:filters) { { ids: [project.to_global_id.to_s] } }
it 'returns matching project' do
is_expected.to contain_exactly(project)
end
end
end
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment